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.model.Group;
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.service.GroupLocalServiceUtil;
025 import com.liferay.portlet.blogs.model.BlogsEntry;
026 import com.liferay.portlet.blogs.service.permission.BlogsPermission;
027 import com.liferay.portlet.bookmarks.model.BookmarksEntry;
028 import com.liferay.portlet.bookmarks.service.permission.BookmarksEntryPermission;
029 import com.liferay.portlet.documentlibrary.model.DLFileEntry;
030 import com.liferay.portlet.documentlibrary.service.permission.DLFileEntryPermission;
031 import com.liferay.portlet.journal.model.JournalArticle;
032 import com.liferay.portlet.journal.service.permission.JournalPermission;
033 import com.liferay.portlet.messageboards.NoSuchDiscussionException;
034 import com.liferay.portlet.messageboards.model.MBCategory;
035 import com.liferay.portlet.messageboards.model.MBThread;
036 import com.liferay.portlet.messageboards.service.MBDiscussionLocalServiceUtil;
037 import com.liferay.portlet.messageboards.service.MBThreadLocalServiceUtil;
038 import com.liferay.portlet.messageboards.service.permission.MBCategoryPermission;
039 import com.liferay.portlet.messageboards.service.permission.MBMessagePermission;
040 import com.liferay.portlet.messageboards.service.permission.MBPermission;
041 import com.liferay.portlet.wiki.model.WikiNode;
042 import com.liferay.portlet.wiki.model.WikiPage;
043 import com.liferay.portlet.wiki.service.permission.WikiNodePermission;
044 import com.liferay.portlet.wiki.service.permission.WikiPagePermission;
045
046
050 public class SubscriptionPermissionImpl implements SubscriptionPermission {
051
052
056 @Override
057 public void check(
058 PermissionChecker permissionChecker, String className, long classPK)
059 throws PortalException, SystemException {
060
061 check(permissionChecker, className, classPK, null, 0);
062 }
063
064 @Override
065 public void check(
066 PermissionChecker permissionChecker, String subscriptionClassName,
067 long subscriptionClassPK, String inferredClassName,
068 long inferredClassPK)
069 throws PortalException, SystemException {
070
071 if (!contains(
072 permissionChecker, subscriptionClassName, subscriptionClassPK,
073 inferredClassName, inferredClassPK)) {
074
075 throw new PrincipalException();
076 }
077 }
078
079
083 @Override
084 public boolean contains(
085 PermissionChecker permissionChecker, String className, long classPK)
086 throws PortalException, SystemException {
087
088 return contains(permissionChecker, className, classPK, null, 0);
089 }
090
091 @Override
092 public boolean contains(
093 PermissionChecker permissionChecker, String subscriptionClassName,
094 long subscriptionClassPK, String inferredClassName,
095 long inferredClassPK)
096 throws PortalException, SystemException {
097
098 if (subscriptionClassName == null) {
099 return false;
100 }
101
102 try {
103 MBDiscussionLocalServiceUtil.getDiscussion(
104 subscriptionClassName, subscriptionClassPK);
105
106 return true;
107 }
108 catch (NoSuchDiscussionException nsde) {
109 }
110
111 if (Validator.isNotNull(inferredClassName)) {
112 Boolean hasPermission = hasPermission(
113 permissionChecker, inferredClassName, inferredClassPK,
114 ActionKeys.VIEW);
115
116 if ((hasPermission == null) || !hasPermission) {
117 return false;
118 }
119 }
120
121 Boolean hasPermission = hasPermission(
122 permissionChecker, subscriptionClassName, subscriptionClassPK,
123 ActionKeys.SUBSCRIBE);
124
125 if (hasPermission != null) {
126 return hasPermission;
127 }
128
129 return true;
130 }
131
132 protected Boolean hasPermission(
133 PermissionChecker permissionChecker, String className, long classPK,
134 String actionId)
135 throws PortalException, SystemException {
136
137 if (className.equals(BlogsEntry.class.getName())) {
138 return BlogsPermission.contains(
139 permissionChecker, classPK, actionId);
140 }
141 else if (className.equals(BookmarksEntry.class.getName())) {
142 return BookmarksEntryPermission.contains(
143 permissionChecker, classPK, actionId);
144 }
145 else if (className.equals(DLFileEntry.class.getName())) {
146 return DLFileEntryPermission.contains(
147 permissionChecker, classPK, actionId);
148 }
149 else if (className.equals(JournalArticle.class.getName())) {
150 return JournalPermission.contains(
151 permissionChecker, classPK, actionId);
152 }
153 else if (className.equals(MBCategory.class.getName())) {
154 Group group = GroupLocalServiceUtil.fetchGroup(classPK);
155
156 if (group == null) {
157 return MBCategoryPermission.contains(
158 permissionChecker, classPK, actionId);
159 }
160
161 return MBPermission.contains(permissionChecker, classPK, actionId);
162 }
163 else if (className.equals(MBThread.class.getName())) {
164 MBThread mbThread = MBThreadLocalServiceUtil.fetchThread(classPK);
165
166 if (mbThread == null) {
167 return false;
168 }
169
170 return MBMessagePermission.contains(
171 permissionChecker, mbThread.getRootMessageId(), actionId);
172 }
173 else if (className.equals(WikiNode.class.getName())) {
174 return WikiNodePermission.contains(
175 permissionChecker, classPK, actionId);
176 }
177 else if (className.equals(WikiPage.class.getName())) {
178 return WikiPagePermission.contains(
179 permissionChecker, classPK, actionId);
180 }
181
182 return null;
183 }
184
185 }