001
014
015 package com.liferay.portlet.documentlibrary.service.permission;
016
017 import com.liferay.portal.kernel.exception.PortalException;
018 import com.liferay.portal.kernel.log.Log;
019 import com.liferay.portal.kernel.log.LogFactoryUtil;
020 import com.liferay.portal.kernel.repository.model.Folder;
021 import com.liferay.portal.kernel.spring.osgi.OSGiBeanProperties;
022 import com.liferay.portal.kernel.staging.permission.StagingPermissionUtil;
023 import com.liferay.portal.model.Group;
024 import com.liferay.portal.model.ResourceConstants;
025 import com.liferay.portal.security.auth.PrincipalException;
026 import com.liferay.portal.security.permission.PermissionChecker;
027 import com.liferay.portal.security.permission.ResourcePermissionChecker;
028 import com.liferay.portal.service.GroupLocalServiceUtil;
029 import com.liferay.portal.service.ResourceLocalServiceUtil;
030 import com.liferay.portal.service.ResourcePermissionLocalServiceUtil;
031 import com.liferay.portal.util.PortletKeys;
032 import com.liferay.portlet.documentlibrary.service.DLAppLocalServiceUtil;
033
034
037 @OSGiBeanProperties(
038 property = {
039 "model.class.name=com.liferay.portal.kernel.repository.model.Folder"
040 }
041 )
042 public class DLPermission implements ResourcePermissionChecker {
043
044 public static final String RESOURCE_NAME =
045 "com.liferay.portlet.documentlibrary";
046
047 public static void check(
048 PermissionChecker permissionChecker, long groupId, String actionId)
049 throws PortalException {
050
051 if (!contains(permissionChecker, groupId, actionId)) {
052 throw new PrincipalException();
053 }
054 }
055
056 public static boolean contains(
057 PermissionChecker permissionChecker, long classPK, String actionId)
058 throws PortalException {
059
060 Group group = GroupLocalServiceUtil.fetchGroup(classPK);
061
062 if (group == null) {
063 Folder folder = DLAppLocalServiceUtil.getFolder(classPK);
064
065 return DLFolderPermission.contains(
066 permissionChecker, folder, actionId);
067 }
068
069 Boolean hasPermission = StagingPermissionUtil.hasPermission(
070 permissionChecker, classPK, RESOURCE_NAME, classPK,
071 PortletKeys.DOCUMENT_LIBRARY, actionId);
072
073 if (hasPermission != null) {
074 return hasPermission.booleanValue();
075 }
076
077 try {
078 int count =
079 ResourcePermissionLocalServiceUtil.getResourcePermissionsCount(
080 permissionChecker.getCompanyId(), RESOURCE_NAME,
081 ResourceConstants.SCOPE_INDIVIDUAL,
082 String.valueOf(classPK));
083
084 if (count == 0) {
085 ResourceLocalServiceUtil.addResources(
086 permissionChecker.getCompanyId(), classPK, 0, RESOURCE_NAME,
087 classPK, false, true, true);
088 }
089 }
090 catch (Exception e) {
091 if (_log.isWarnEnabled()) {
092 _log.warn(e, e);
093 }
094 }
095
096 return permissionChecker.hasPermission(
097 classPK, RESOURCE_NAME, classPK, actionId);
098 }
099
100 @Override
101 public Boolean checkResource(
102 PermissionChecker permissionChecker, long classPK, String actionId)
103 throws PortalException {
104
105 return contains(permissionChecker, classPK, actionId);
106 }
107
108 private static final Log _log = LogFactoryUtil.getLog(DLPermission.class);
109
110 }