001
014
015 package com.liferay.portlet.journal.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.staging.permission.StagingPermissionUtil;
020 import com.liferay.portal.kernel.workflow.permission.WorkflowPermissionUtil;
021 import com.liferay.portal.security.auth.PrincipalException;
022 import com.liferay.portal.security.permission.ActionKeys;
023 import com.liferay.portal.security.permission.PermissionChecker;
024 import com.liferay.portal.util.PortletKeys;
025 import com.liferay.portal.util.PropsValues;
026 import com.liferay.portlet.journal.NoSuchFolderException;
027 import com.liferay.portlet.journal.model.JournalArticle;
028 import com.liferay.portlet.journal.model.JournalFolder;
029 import com.liferay.portlet.journal.model.JournalFolderConstants;
030 import com.liferay.portlet.journal.service.JournalArticleLocalServiceUtil;
031 import com.liferay.portlet.journal.service.JournalFolderLocalServiceUtil;
032
033
037 public class JournalArticlePermission {
038
039 public static void check(
040 PermissionChecker permissionChecker, JournalArticle article,
041 String actionId)
042 throws PortalException, SystemException {
043
044 if (!contains(permissionChecker, article, actionId)) {
045 throw new PrincipalException();
046 }
047 }
048
049 public static void check(
050 PermissionChecker permissionChecker, long resourcePrimKey,
051 String actionId)
052 throws PortalException, SystemException {
053
054 if (!contains(permissionChecker, resourcePrimKey, actionId)) {
055 throw new PrincipalException();
056 }
057 }
058
059 public static void check(
060 PermissionChecker permissionChecker, long groupId, String articleId,
061 double version, String actionId)
062 throws PortalException, SystemException {
063
064 if (!contains(
065 permissionChecker, groupId, articleId, version, actionId)) {
066
067 throw new PrincipalException();
068 }
069 }
070
071 public static void check(
072 PermissionChecker permissionChecker, long groupId, String articleId,
073 int status, String actionId)
074 throws PortalException, SystemException {
075
076 if (!contains(
077 permissionChecker, groupId, articleId, status, actionId)) {
078
079 throw new PrincipalException();
080 }
081 }
082
083 public static void check(
084 PermissionChecker permissionChecker, long groupId, String articleId,
085 String actionId)
086 throws PortalException, SystemException {
087
088 if (!contains(permissionChecker, groupId, articleId, actionId)) {
089 throw new PrincipalException();
090 }
091 }
092
093 public static boolean contains(
094 PermissionChecker permissionChecker, JournalArticle article,
095 String actionId)
096 throws PortalException, SystemException {
097
098 Boolean hasPermission = StagingPermissionUtil.hasPermission(
099 permissionChecker, article.getGroupId(),
100 JournalArticle.class.getName(), article.getResourcePrimKey(),
101 PortletKeys.JOURNAL, actionId);
102
103 if (hasPermission != null) {
104 return hasPermission.booleanValue();
105 }
106
107 if (article.isDraft()) {
108 if (actionId.equals(ActionKeys.VIEW) &&
109 !contains(permissionChecker, article, ActionKeys.UPDATE)) {
110
111 return false;
112 }
113 }
114 else if (article.isPending()) {
115 hasPermission = WorkflowPermissionUtil.hasPermission(
116 permissionChecker, article.getGroupId(),
117 JournalArticle.class.getName(), article.getResourcePrimKey(),
118 actionId);
119
120 if (hasPermission != null) {
121 return hasPermission.booleanValue();
122 }
123 }
124
125 if (actionId.equals(ActionKeys.VIEW) &&
126 !PropsValues.JOURNAL_ARTICLE_VIEW_PERMISSION_CHECK_ENABLED) {
127
128 return true;
129 }
130
131 if (actionId.equals(ActionKeys.VIEW) &&
132 PropsValues.PERMISSIONS_VIEW_DYNAMIC_INHERITANCE) {
133
134 long folderId = article.getFolderId();
135
136 if (folderId == JournalFolderConstants.DEFAULT_PARENT_FOLDER_ID) {
137 if (!JournalPermission.contains(
138 permissionChecker, article.getGroupId(), actionId)) {
139
140 return false;
141 }
142 }
143 else {
144 try {
145 JournalFolder folder =
146 JournalFolderLocalServiceUtil.getFolder(folderId);
147
148 if (!JournalFolderPermission.contains(
149 permissionChecker, folder, ActionKeys.ACCESS) &&
150 !JournalFolderPermission.contains(
151 permissionChecker, folder, ActionKeys.VIEW)) {
152
153 return false;
154 }
155 }
156 catch (NoSuchFolderException nsfe) {
157 if (!article.isInTrash()) {
158 throw nsfe;
159 }
160 }
161 }
162 }
163
164 if (permissionChecker.hasOwnerPermission(
165 article.getCompanyId(), JournalArticle.class.getName(),
166 article.getResourcePrimKey(), article.getUserId(), actionId)) {
167
168 return true;
169 }
170
171 return permissionChecker.hasPermission(
172 article.getGroupId(), JournalArticle.class.getName(),
173 article.getResourcePrimKey(), actionId);
174 }
175
176 public static boolean contains(
177 PermissionChecker permissionChecker, long resourcePrimKey,
178 String actionId)
179 throws PortalException, SystemException {
180
181 JournalArticle article =
182 JournalArticleLocalServiceUtil.getLatestArticle(resourcePrimKey);
183
184 return contains(permissionChecker, article, actionId);
185 }
186
187 public static boolean contains(
188 PermissionChecker permissionChecker, long groupId, String articleId,
189 double version, String actionId)
190 throws PortalException, SystemException {
191
192 JournalArticle article = JournalArticleLocalServiceUtil.getArticle(
193 groupId, articleId, version);
194
195 return contains(permissionChecker, article, actionId);
196 }
197
198 public static boolean contains(
199 PermissionChecker permissionChecker, long groupId, String articleId,
200 int status, String actionId)
201 throws PortalException, SystemException {
202
203 JournalArticle article =
204 JournalArticleLocalServiceUtil.getLatestArticle(
205 groupId, articleId, status);
206
207 return contains(permissionChecker, article, actionId);
208 }
209
210 public static boolean contains(
211 PermissionChecker permissionChecker, long groupId, String articleId,
212 String actionId)
213 throws PortalException, SystemException {
214
215 JournalArticle article = JournalArticleLocalServiceUtil.getArticle(
216 groupId, articleId);
217
218 return contains(permissionChecker, article, actionId);
219 }
220
221 }