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 @Override
047 public void check(
048 PermissionChecker permissionChecker, String className, long classPK)
049 throws PortalException, SystemException {
050
051 if (!contains(permissionChecker, className, classPK)) {
052 throw new PrincipalException();
053 }
054 }
055
056 @Override
057 public boolean contains(
058 PermissionChecker permissionChecker, String className, long classPK)
059 throws PortalException, SystemException {
060
061 if (className == null) {
062 return false;
063 }
064
065 try {
066 MBDiscussionLocalServiceUtil.getDiscussion(className, classPK);
067
068 return true;
069 }
070 catch (NoSuchDiscussionException nsde) {
071 }
072
073 if (className.equals(BlogsEntry.class.getName())) {
074 return BlogsPermission.contains(
075 permissionChecker, classPK, ActionKeys.SUBSCRIBE);
076 }
077 else if (className.equals(JournalArticle.class.getName())) {
078 return JournalPermission.contains(
079 permissionChecker, classPK, ActionKeys.SUBSCRIBE);
080 }
081 else if (className.equals(MBCategory.class.getName())) {
082 Group group = GroupLocalServiceUtil.fetchGroup(classPK);
083
084 if (group == null) {
085 return MBCategoryPermission.contains(
086 permissionChecker, classPK, ActionKeys.SUBSCRIBE);
087 }
088
089 return MBPermission.contains(
090 permissionChecker, classPK, ActionKeys.SUBSCRIBE);
091 }
092 else if (className.equals(MBThread.class.getName())) {
093 MBThread mbThread = MBThreadLocalServiceUtil.fetchThread(classPK);
094
095 if (mbThread == null) {
096 return false;
097 }
098
099 return MBMessagePermission.contains(
100 permissionChecker, mbThread.getRootMessageId(),
101 ActionKeys.SUBSCRIBE);
102 }
103 else if (className.equals(WikiNode.class.getName())) {
104 return WikiNodePermission.contains(
105 permissionChecker, classPK, ActionKeys.SUBSCRIBE);
106 }
107 else if (className.equals(WikiPage.class.getName())) {
108 return WikiPagePermission.contains(
109 permissionChecker, classPK, ActionKeys.SUBSCRIBE);
110 }
111
112 return true;
113 }
114
115 }