001
014
015 package com.liferay.portal.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.util.Validator;
020 import com.liferay.portal.kernel.workflow.WorkflowInstance;
021 import com.liferay.portal.model.Group;
022 import com.liferay.portal.model.Layout;
023 import com.liferay.portal.security.auth.PrincipalException;
024 import com.liferay.portal.security.permission.ActionKeys;
025 import com.liferay.portal.security.permission.PermissionChecker;
026 import com.liferay.portal.service.GroupLocalServiceUtil;
027 import com.liferay.portal.util.PortletKeys;
028 import com.liferay.portlet.blogs.model.BlogsEntry;
029 import com.liferay.portlet.blogs.service.permission.BlogsPermission;
030 import com.liferay.portlet.bookmarks.model.BookmarksEntry;
031 import com.liferay.portlet.bookmarks.service.permission.BookmarksEntryPermission;
032 import com.liferay.portlet.documentlibrary.model.DLFileEntry;
033 import com.liferay.portlet.documentlibrary.model.DLFolder;
034 import com.liferay.portlet.documentlibrary.service.DLFileEntryLocalServiceUtil;
035 import com.liferay.portlet.documentlibrary.service.permission.DLFileEntryPermission;
036 import com.liferay.portlet.documentlibrary.service.permission.DLFolderPermission;
037 import com.liferay.portlet.documentlibrary.service.persistence.DLFolderUtil;
038 import com.liferay.portlet.journal.model.JournalArticle;
039 import com.liferay.portlet.journal.service.permission.JournalPermission;
040 import com.liferay.portlet.messageboards.model.MBCategory;
041 import com.liferay.portlet.messageboards.model.MBDiscussion;
042 import com.liferay.portlet.messageboards.model.MBThread;
043 import com.liferay.portlet.messageboards.service.MBDiscussionLocalServiceUtil;
044 import com.liferay.portlet.messageboards.service.MBThreadLocalServiceUtil;
045 import com.liferay.portlet.messageboards.service.permission.MBCategoryPermission;
046 import com.liferay.portlet.messageboards.service.permission.MBDiscussionPermission;
047 import com.liferay.portlet.messageboards.service.permission.MBMessagePermission;
048 import com.liferay.portlet.messageboards.service.permission.MBPermission;
049 import com.liferay.portlet.wiki.model.WikiNode;
050 import com.liferay.portlet.wiki.model.WikiPage;
051 import com.liferay.portlet.wiki.service.permission.WikiNodePermission;
052 import com.liferay.portlet.wiki.service.permission.WikiPagePermission;
053
054
058 public class SubscriptionPermissionImpl implements SubscriptionPermission {
059
060
064 @Override
065 public void check(
066 PermissionChecker permissionChecker, String className, long classPK)
067 throws PortalException, SystemException {
068
069 check(permissionChecker, className, classPK, null, 0);
070 }
071
072 @Override
073 public void check(
074 PermissionChecker permissionChecker, String subscriptionClassName,
075 long subscriptionClassPK, String inferredClassName,
076 long inferredClassPK)
077 throws PortalException, SystemException {
078
079 if (!contains(
080 permissionChecker, subscriptionClassName, subscriptionClassPK,
081 inferredClassName, inferredClassPK)) {
082
083 throw new PrincipalException();
084 }
085 }
086
087
091 @Override
092 public boolean contains(
093 PermissionChecker permissionChecker, String className, long classPK)
094 throws PortalException, SystemException {
095
096 return contains(permissionChecker, className, classPK, null, 0);
097 }
098
099 @Override
100 public boolean contains(
101 PermissionChecker permissionChecker, String subscriptionClassName,
102 long subscriptionClassPK, String inferredClassName,
103 long inferredClassPK)
104 throws PortalException, SystemException {
105
106 if (subscriptionClassName == null) {
107 return false;
108 }
109
110 if (Validator.isNotNull(inferredClassName)) {
111 Boolean hasPermission = hasPermission(
112 permissionChecker, inferredClassName, inferredClassPK,
113 ActionKeys.VIEW);
114
115 if ((hasPermission == null) || !hasPermission) {
116 return false;
117 }
118 }
119
120 Boolean hasPermission = hasPermission(
121 permissionChecker, subscriptionClassName, subscriptionClassPK,
122 ActionKeys.SUBSCRIBE);
123
124 if (hasPermission != null) {
125 return hasPermission;
126 }
127
128 if (Validator.equals(
129 inferredClassName,
130 "com.liferay.portlet.documentlibrary.model.DLFileEntry")) {
131
132 DLFileEntry dlFileEntry =
133 DLFileEntryLocalServiceUtil.getDLFileEntry(inferredClassPK);
134
135 DLFolder dlFolder = DLFolderUtil.fetchByPrimaryKey(
136 dlFileEntry.getFolderId());
137
138 if (Validator.isNotNull(dlFolder)) {
139 return DLFolderPermission.contains(
140 permissionChecker, dlFolder, ActionKeys.VIEW);
141 }
142 }
143
144 return true;
145 }
146
147 protected Boolean hasPermission(
148 PermissionChecker permissionChecker, String className, long classPK,
149 String actionId)
150 throws PortalException, SystemException {
151
152 MBDiscussion mbDiscussion =
153 MBDiscussionLocalServiceUtil.fetchDiscussion(className, classPK);
154
155 if (mbDiscussion != null) {
156 if (className.equals(Layout.class.getName())) {
157 return LayoutPermissionUtil.contains(
158 permissionChecker, classPK, ActionKeys.VIEW);
159 }
160
161 MBThread mbThread = MBThreadLocalServiceUtil.fetchThread(
162 mbDiscussion.getThreadId());
163
164 if (className.equals(WorkflowInstance.class.getName())) {
165 return permissionChecker.hasPermission(
166 mbThread.getGroupId(), PortletKeys.WORKFLOW_DEFINITIONS,
167 mbThread.getGroupId(), ActionKeys.VIEW);
168 }
169
170 return MBDiscussionPermission.contains(
171 permissionChecker, mbThread.getCompanyId(),
172 mbThread.getGroupId(), className, classPK, mbThread.getUserId(),
173 ActionKeys.VIEW);
174 }
175
176 if (className.equals(BlogsEntry.class.getName())) {
177 return BlogsPermission.contains(
178 permissionChecker, classPK, actionId);
179 }
180 else if (className.equals(BookmarksEntry.class.getName())) {
181 return BookmarksEntryPermission.contains(
182 permissionChecker, classPK, actionId);
183 }
184 else if (className.equals(DLFileEntry.class.getName())) {
185 return DLFileEntryPermission.contains(
186 permissionChecker, classPK, actionId);
187 }
188 else if (className.equals(JournalArticle.class.getName())) {
189 return JournalPermission.contains(
190 permissionChecker, classPK, actionId);
191 }
192 else if (className.equals(MBCategory.class.getName())) {
193 Group group = GroupLocalServiceUtil.fetchGroup(classPK);
194
195 if (group == null) {
196 return MBCategoryPermission.contains(
197 permissionChecker, classPK, actionId);
198 }
199
200 return MBPermission.contains(permissionChecker, classPK, actionId);
201 }
202 else if (className.equals(MBThread.class.getName())) {
203 MBThread mbThread = MBThreadLocalServiceUtil.fetchThread(classPK);
204
205 if (mbThread == null) {
206 return false;
207 }
208
209 return MBMessagePermission.contains(
210 permissionChecker, mbThread.getRootMessageId(), actionId);
211 }
212 else if (className.equals(WikiNode.class.getName())) {
213 return WikiNodePermission.contains(
214 permissionChecker, classPK, actionId);
215 }
216 else if (className.equals(WikiPage.class.getName())) {
217 return WikiPagePermission.contains(
218 permissionChecker, classPK, actionId);
219 }
220
221 return null;
222 }
223
224 }