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.exception.SystemException;
019 import com.liferay.portal.kernel.repository.model.FileEntry;
020 import com.liferay.portal.kernel.staging.permission.StagingPermissionUtil;
021 import com.liferay.portal.kernel.workflow.permission.WorkflowPermissionUtil;
022 import com.liferay.portal.security.auth.PrincipalException;
023 import com.liferay.portal.security.permission.ActionKeys;
024 import com.liferay.portal.security.permission.PermissionChecker;
025 import com.liferay.portal.util.PortletKeys;
026 import com.liferay.portal.util.PropsValues;
027 import com.liferay.portlet.documentlibrary.NoSuchFolderException;
028 import com.liferay.portlet.documentlibrary.model.DLFileEntry;
029 import com.liferay.portlet.documentlibrary.model.DLFileVersion;
030 import com.liferay.portlet.documentlibrary.model.DLFolder;
031 import com.liferay.portlet.documentlibrary.model.DLFolderConstants;
032 import com.liferay.portlet.documentlibrary.service.DLAppLocalServiceUtil;
033 import com.liferay.portlet.documentlibrary.service.DLFolderLocalServiceUtil;
034
035
039 public class DLFileEntryPermission {
040
041 public static void check(
042 PermissionChecker permissionChecker, DLFileEntry dlFileEntry,
043 String actionId)
044 throws PortalException, SystemException {
045
046 if (!contains(permissionChecker, dlFileEntry, actionId)) {
047 throw new PrincipalException();
048 }
049 }
050
051 public static void check(
052 PermissionChecker permissionChecker, FileEntry fileEntry,
053 String actionId)
054 throws PortalException, SystemException {
055
056 if (!fileEntry.containsPermission(permissionChecker, actionId)) {
057 throw new PrincipalException();
058 }
059 }
060
061 public static void check(
062 PermissionChecker permissionChecker, long fileEntryId,
063 String actionId)
064 throws PortalException, SystemException {
065
066 if (!contains(permissionChecker, fileEntryId, actionId)) {
067 throw new PrincipalException();
068 }
069 }
070
071 public static boolean contains(
072 PermissionChecker permissionChecker, DLFileEntry dlFileEntry,
073 String actionId)
074 throws PortalException, SystemException {
075
076 Boolean hasPermission = StagingPermissionUtil.hasPermission(
077 permissionChecker, dlFileEntry.getGroupId(),
078 DLFileEntry.class.getName(), dlFileEntry.getFileEntryId(),
079 PortletKeys.DOCUMENT_LIBRARY, actionId);
080
081 if (hasPermission != null) {
082 return hasPermission.booleanValue();
083 }
084
085 DLFileVersion latestDLFileVersion = dlFileEntry.getLatestFileVersion(
086 false);
087
088 if (latestDLFileVersion.isPending()) {
089 hasPermission = WorkflowPermissionUtil.hasPermission(
090 permissionChecker, dlFileEntry.getGroupId(),
091 DLFileEntry.class.getName(), dlFileEntry.getFileEntryId(),
092 actionId);
093
094 if (hasPermission != null) {
095 return hasPermission.booleanValue();
096 }
097 }
098
099 if (PropsValues.PERMISSIONS_VIEW_DYNAMIC_INHERITANCE) {
100 if (dlFileEntry.getFolderId() !=
101 DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
102
103 try {
104 DLFolder dlFolder = DLFolderLocalServiceUtil.getFolder(
105 dlFileEntry.getFolderId());
106
107 if (!DLFolderPermission.contains(
108 permissionChecker, dlFolder, ActionKeys.ACCESS) &&
109 !DLFolderPermission.contains(
110 permissionChecker, dlFolder, ActionKeys.VIEW)) {
111
112 return false;
113 }
114 }
115 catch (NoSuchFolderException nsfe) {
116 if (!latestDLFileVersion.isInTrash()) {
117 throw nsfe;
118 }
119 }
120 }
121 }
122
123 if (permissionChecker.hasOwnerPermission(
124 dlFileEntry.getCompanyId(), DLFileEntry.class.getName(),
125 dlFileEntry.getFileEntryId(), dlFileEntry.getUserId(),
126 actionId)) {
127
128 return true;
129 }
130
131 return permissionChecker.hasPermission(
132 dlFileEntry.getGroupId(), DLFileEntry.class.getName(),
133 dlFileEntry.getFileEntryId(), actionId);
134 }
135
136 public static boolean contains(
137 PermissionChecker permissionChecker, FileEntry fileEntry,
138 String actionId)
139 throws PortalException, SystemException {
140
141 return fileEntry.containsPermission(permissionChecker, actionId);
142 }
143
144 public static boolean contains(
145 PermissionChecker permissionChecker, long fileEntryId,
146 String actionId)
147 throws PortalException, SystemException {
148
149 FileEntry fileEntry = DLAppLocalServiceUtil.getFileEntry(fileEntryId);
150
151 return fileEntry.containsPermission(permissionChecker, actionId);
152 }
153
154 }