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.model.Group;
020 import com.liferay.portal.security.auth.PrincipalException;
021 import com.liferay.portal.security.permission.ActionKeys;
022 import com.liferay.portal.security.permission.PermissionChecker;
023 import com.liferay.portal.service.GroupLocalServiceUtil;
024 import com.liferay.portlet.blogs.model.BlogsEntry;
025 import com.liferay.portlet.blogs.service.permission.BlogsPermission;
026 import com.liferay.portlet.journal.model.JournalArticle;
027 import com.liferay.portlet.journal.service.permission.JournalPermission;
028 import com.liferay.portlet.messageboards.NoSuchDiscussionException;
029 import com.liferay.portlet.messageboards.model.MBCategory;
030 import com.liferay.portlet.messageboards.model.MBThread;
031 import com.liferay.portlet.messageboards.service.MBDiscussionLocalServiceUtil;
032 import com.liferay.portlet.messageboards.service.MBThreadLocalServiceUtil;
033 import com.liferay.portlet.messageboards.service.permission.MBCategoryPermission;
034 import com.liferay.portlet.messageboards.service.permission.MBMessagePermission;
035 import com.liferay.portlet.messageboards.service.permission.MBPermission;
036 import com.liferay.portlet.wiki.model.WikiNode;
037 import com.liferay.portlet.wiki.model.WikiPage;
038 import com.liferay.portlet.wiki.service.permission.WikiNodePermission;
039 import com.liferay.portlet.wiki.service.permission.WikiPagePermission;
040
041
044 public class SubscriptionPermissionImpl implements SubscriptionPermission {
045
046 public void check(
047 PermissionChecker permissionChecker, String className, long classPK)
048 throws PortalException, SystemException {
049
050 if (!contains(permissionChecker, className, classPK)) {
051 throw new PrincipalException();
052 }
053 }
054
055 public boolean contains(
056 PermissionChecker permissionChecker, String className, long classPK)
057 throws PortalException, SystemException {
058
059 if (className == null) {
060 return false;
061 }
062
063 try {
064 MBDiscussionLocalServiceUtil.getDiscussion(className, classPK);
065
066 return true;
067 }
068 catch (NoSuchDiscussionException nsde) {
069 }
070
071 if (className.equals(BlogsEntry.class.getName())) {
072 return BlogsPermission.contains(
073 permissionChecker, classPK, ActionKeys.SUBSCRIBE);
074 }
075 else if (className.equals(JournalArticle.class.getName())) {
076 return JournalPermission.contains(
077 permissionChecker, classPK, ActionKeys.SUBSCRIBE);
078 }
079 else if (className.equals(MBCategory.class.getName())) {
080 Group group = GroupLocalServiceUtil.fetchGroup(classPK);
081
082 if (group == null) {
083 return MBCategoryPermission.contains(
084 permissionChecker, classPK, ActionKeys.SUBSCRIBE);
085 }
086
087 return MBPermission.contains(
088 permissionChecker, classPK, ActionKeys.SUBSCRIBE);
089 }
090 else if (className.equals(MBThread.class.getName())) {
091 MBThread mbThread = MBThreadLocalServiceUtil.fetchThread(classPK);
092
093 if (mbThread == null) {
094 return false;
095 }
096
097 return MBMessagePermission.contains(
098 permissionChecker, mbThread.getRootMessageId(),
099 ActionKeys.SUBSCRIBE);
100 }
101 else if (className.equals(WikiNode.class.getName())) {
102 return WikiNodePermission.contains(
103 permissionChecker, classPK, ActionKeys.SUBSCRIBE);
104 }
105 else if (className.equals(WikiPage.class.getName())) {
106 return WikiPagePermission.contains(
107 permissionChecker, classPK, ActionKeys.SUBSCRIBE);
108 }
109
110 return true;
111 }
112
113 }