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 true);
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 (dlFileEntry.getFolderId() !=
100 DLFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
101
102 try {
103 DLFolder dlFolder = DLFolderLocalServiceUtil.getFolder(
104 dlFileEntry.getFolderId());
105
106 if (PropsValues.PERMISSIONS_VIEW_DYNAMIC_INHERITANCE &&
107 !DLFolderPermission.contains(
108 permissionChecker, dlFolder, ActionKeys.ACCESS) &&
109 !DLFolderPermission.contains(
110 permissionChecker, dlFolder, ActionKeys.VIEW)) {
111
112 return false;
113 }
114
115 if (!actionId.equals(ActionKeys.OVERRIDE_CHECKOUT) &&
116 DLFolderPermission.contains(
117 permissionChecker, dlFolder, actionId)) {
118
119 return true;
120 }
121 }
122 catch (NoSuchFolderException nsfe) {
123 if (!latestDLFileVersion.isInTrash()) {
124 throw nsfe;
125 }
126 }
127 }
128
129 if (permissionChecker.hasOwnerPermission(
130 dlFileEntry.getCompanyId(), DLFileEntry.class.getName(),
131 dlFileEntry.getFileEntryId(), dlFileEntry.getUserId(),
132 actionId)) {
133
134 return true;
135 }
136
137 return permissionChecker.hasPermission(
138 dlFileEntry.getGroupId(), DLFileEntry.class.getName(),
139 dlFileEntry.getFileEntryId(), actionId);
140 }
141
142 public static boolean contains(
143 PermissionChecker permissionChecker, FileEntry fileEntry,
144 String actionId)
145 throws PortalException, SystemException {
146
147 return fileEntry.containsPermission(permissionChecker, actionId);
148 }
149
150 public static boolean contains(
151 PermissionChecker permissionChecker, long fileEntryId,
152 String actionId)
153 throws PortalException, SystemException {
154
155 FileEntry fileEntry = DLAppLocalServiceUtil.getFileEntry(fileEntryId);
156
157 return fileEntry.containsPermission(permissionChecker, actionId);
158 }
159
160 }