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.asset.model.AssetEntry;
025 import com.liferay.portlet.asset.service.AssetEntryLocalServiceUtil;
026 import com.liferay.portlet.blogs.model.BlogsEntry;
027 import com.liferay.portlet.blogs.service.BlogsEntryLocalServiceUtil;
028 import com.liferay.portlet.blogs.service.permission.BlogsPermission;
029 import com.liferay.portlet.journal.model.JournalArticle;
030 import com.liferay.portlet.journal.service.JournalArticleLocalServiceUtil;
031 import com.liferay.portlet.journal.service.permission.JournalPermission;
032 import com.liferay.portlet.messageboards.model.MBCategory;
033 import com.liferay.portlet.messageboards.model.MBThread;
034 import com.liferay.portlet.messageboards.service.MBThreadLocalServiceUtil;
035 import com.liferay.portlet.messageboards.service.permission.MBCategoryPermission;
036 import com.liferay.portlet.messageboards.service.permission.MBMessagePermission;
037 import com.liferay.portlet.messageboards.service.permission.MBPermission;
038 import com.liferay.portlet.wiki.model.WikiNode;
039 import com.liferay.portlet.wiki.model.WikiPage;
040 import com.liferay.portlet.wiki.service.permission.WikiNodePermission;
041 import com.liferay.portlet.wiki.service.permission.WikiPagePermission;
042
043
046 public class SubscriptionPermissionImpl implements SubscriptionPermission {
047
048 public void check(
049 PermissionChecker permissionChecker, String className, long classPK)
050 throws PortalException, SystemException {
051
052 if (!contains(permissionChecker, className, classPK)) {
053 throw new PrincipalException();
054 }
055 }
056
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 if (className.equals(BlogsEntry.class.getName())) {
066 AssetEntry assetEntry = AssetEntryLocalServiceUtil.fetchEntry(
067 className, classPK);
068
069 if (assetEntry == null) {
070 return false;
071 }
072
073 long groupId = classPK;
074
075 String classPKString = String.valueOf(classPK);
076
077 if (!classPKString.equals(assetEntry.getTitle())) {
078 BlogsEntry blogsEntry =
079 BlogsEntryLocalServiceUtil.getBlogsEntry(classPK);
080
081 groupId = blogsEntry.getGroupId();
082 }
083
084 return BlogsPermission.contains(
085 permissionChecker, groupId, ActionKeys.SUBSCRIBE);
086 }
087 else if (className.equals(JournalArticle.class.getName())) {
088 long groupId = classPK;
089
090 Group group = GroupLocalServiceUtil.fetchGroup(groupId);
091
092 if (group == null) {
093 JournalArticle journalArticle =
094 JournalArticleLocalServiceUtil.getLatestArticle(classPK);
095
096 groupId = journalArticle.getGroupId();
097 }
098
099 return JournalPermission.contains(
100 permissionChecker, groupId, ActionKeys.SUBSCRIBE);
101 }
102 else if (className.equals(MBCategory.class.getName())) {
103 Group group = GroupLocalServiceUtil.fetchGroup(classPK);
104
105 if (group == null) {
106 return MBCategoryPermission.contains(
107 permissionChecker, classPK, ActionKeys.SUBSCRIBE);
108 }
109 else {
110 return MBPermission.contains(
111 permissionChecker, classPK, ActionKeys.SUBSCRIBE);
112 }
113 }
114 else if (className.equals(MBThread.class.getName())) {
115 MBThread mbThread = MBThreadLocalServiceUtil.fetchThread(classPK);
116
117 return MBMessagePermission.contains(
118 permissionChecker, mbThread.getRootMessageId(),
119 ActionKeys.SUBSCRIBE);
120 }
121 else if (className.equals(WikiNode.class.getName())) {
122 return WikiNodePermission.contains(
123 permissionChecker, classPK, ActionKeys.SUBSCRIBE);
124 }
125 else if (className.equals(WikiPage.class.getName())) {
126 return WikiPagePermission.contains(
127 permissionChecker, classPK, ActionKeys.SUBSCRIBE);
128 }
129
130 return true;
131 }
132
133 }