001
014
015 package com.liferay.portlet.announcements.service.impl;
016
017 import com.liferay.announcements.kernel.constants.AnnouncementsConstants;
018 import com.liferay.announcements.kernel.model.AnnouncementsEntry;
019 import com.liferay.portal.kernel.exception.PortalException;
020 import com.liferay.portal.kernel.portlet.PortletProvider;
021 import com.liferay.portal.kernel.portlet.PortletProviderUtil;
022 import com.liferay.portal.kernel.security.auth.PrincipalException;
023 import com.liferay.portal.kernel.security.permission.ActionKeys;
024 import com.liferay.portal.kernel.security.permission.PermissionChecker;
025 import com.liferay.portal.model.Group;
026 import com.liferay.portal.model.Organization;
027 import com.liferay.portal.model.Role;
028 import com.liferay.portal.model.Team;
029 import com.liferay.portal.model.UserGroup;
030 import com.liferay.portal.service.permission.GroupPermissionUtil;
031 import com.liferay.portal.service.permission.OrganizationPermissionUtil;
032 import com.liferay.portal.service.permission.PortalPermissionUtil;
033 import com.liferay.portal.service.permission.RolePermissionUtil;
034 import com.liferay.portal.service.permission.UserGroupPermissionUtil;
035 import com.liferay.portal.util.PortalUtil;
036 import com.liferay.portal.util.PortletKeys;
037 import com.liferay.portlet.announcements.service.base.AnnouncementsEntryServiceBaseImpl;
038 import com.liferay.portlet.announcements.service.permission.AnnouncementsEntryPermission;
039
040
043 public class AnnouncementsEntryServiceImpl
044 extends AnnouncementsEntryServiceBaseImpl {
045
046 @Override
047 public AnnouncementsEntry addEntry(
048 long plid, long classNameId, long classPK, String title,
049 String content, String url, String type, int displayDateMonth,
050 int displayDateDay, int displayDateYear, int displayDateHour,
051 int displayDateMinute, boolean displayImmediately,
052 int expirationDateMonth, int expirationDateDay,
053 int expirationDateYear, int expirationDateHour,
054 int expirationDateMinute, int priority, boolean alert)
055 throws PortalException {
056
057 PermissionChecker permissionChecker = getPermissionChecker();
058
059 if (alert) {
060 String portletId = PortletProviderUtil.getPortletId(
061 AnnouncementsConstants.CLASS_NAME_ALERTS_ENTRY,
062 PortletProvider.Action.MANAGE);
063
064 AnnouncementsEntryPermission.check(
065 permissionChecker, plid, portletId, ActionKeys.ADD_ENTRY);
066 }
067 else {
068 String portletId = PortletProviderUtil.getPortletId(
069 AnnouncementsEntry.class.getName(),
070 PortletProvider.Action.MANAGE);
071
072 AnnouncementsEntryPermission.check(
073 permissionChecker, plid, portletId, ActionKeys.ADD_ENTRY);
074 }
075
076 if (classNameId == 0) {
077 if (!PortalPermissionUtil.contains(
078 permissionChecker, ActionKeys.ADD_GENERAL_ANNOUNCEMENTS)) {
079
080 throw new PrincipalException.MustHavePermission(
081 permissionChecker, PortletKeys.PORTAL, PortletKeys.PORTAL,
082 ActionKeys.ADD_GENERAL_ANNOUNCEMENTS);
083 }
084 }
085 else {
086 String className = PortalUtil.getClassName(classNameId);
087
088 if (className.equals(Group.class.getName()) &&
089 !GroupPermissionUtil.contains(
090 permissionChecker, classPK,
091 ActionKeys.MANAGE_ANNOUNCEMENTS)) {
092
093 throw new PrincipalException.MustHavePermission(
094 permissionChecker, className, classPK,
095 ActionKeys.MANAGE_ANNOUNCEMENTS);
096 }
097
098 if (className.equals(Organization.class.getName()) &&
099 !OrganizationPermissionUtil.contains(
100 permissionChecker, classPK,
101 ActionKeys.MANAGE_ANNOUNCEMENTS)) {
102
103 throw new PrincipalException.MustHavePermission(
104 permissionChecker, className, classPK,
105 ActionKeys.MANAGE_ANNOUNCEMENTS);
106 }
107
108 if (className.equals(Role.class.getName())) {
109 Role role = roleLocalService.getRole(classPK);
110
111 if (role.isTeam()) {
112 Team team = teamLocalService.getTeam(role.getClassPK());
113
114 if (!GroupPermissionUtil.contains(
115 permissionChecker, team.getGroupId(),
116 ActionKeys.MANAGE_ANNOUNCEMENTS) ||
117 !RolePermissionUtil.contains(
118 permissionChecker, team.getGroupId(), classPK,
119 ActionKeys.MANAGE_ANNOUNCEMENTS)) {
120
121 throw new PrincipalException.MustHavePermission(
122 permissionChecker, Team.class.getName(), classPK,
123 ActionKeys.MANAGE_ANNOUNCEMENTS);
124 }
125 }
126 else if (!RolePermissionUtil.contains(
127 permissionChecker, classPK,
128 ActionKeys.MANAGE_ANNOUNCEMENTS)) {
129
130 throw new PrincipalException.MustHavePermission(
131 permissionChecker, className, classPK,
132 ActionKeys.MANAGE_ANNOUNCEMENTS);
133 }
134 }
135
136 if (className.equals(UserGroup.class.getName()) &&
137 !UserGroupPermissionUtil.contains(
138 permissionChecker, classPK,
139 ActionKeys.MANAGE_ANNOUNCEMENTS)) {
140
141 throw new PrincipalException.MustHavePermission(
142 permissionChecker, className, classPK,
143 ActionKeys.MANAGE_ANNOUNCEMENTS);
144 }
145 }
146
147 return announcementsEntryLocalService.addEntry(
148 getUserId(), classNameId, classPK, title, content, url, type,
149 displayDateMonth, displayDateDay, displayDateYear, displayDateHour,
150 displayDateMinute, displayImmediately, expirationDateMonth,
151 expirationDateDay, expirationDateYear, expirationDateHour,
152 expirationDateMinute, priority, alert);
153 }
154
155 @Override
156 public void deleteEntry(long entryId) throws PortalException {
157 AnnouncementsEntryPermission.check(
158 getPermissionChecker(), entryId, ActionKeys.DELETE);
159
160 announcementsEntryLocalService.deleteEntry(entryId);
161 }
162
163 @Override
164 public AnnouncementsEntry getEntry(long entryId) throws PortalException {
165 AnnouncementsEntry entry = announcementsEntryLocalService.getEntry(
166 entryId);
167
168 AnnouncementsEntryPermission.check(
169 getPermissionChecker(), entry, ActionKeys.VIEW);
170
171 return entry;
172 }
173
174 @Override
175 public AnnouncementsEntry updateEntry(
176 long entryId, String title, String content, String url, String type,
177 int displayDateMonth, int displayDateDay, int displayDateYear,
178 int displayDateHour, int displayDateMinute,
179 boolean displayImmediately, int expirationDateMonth,
180 int expirationDateDay, int expirationDateYear,
181 int expirationDateHour, int expirationDateMinute, int priority)
182 throws PortalException {
183
184 AnnouncementsEntryPermission.check(
185 getPermissionChecker(), entryId, ActionKeys.UPDATE);
186
187 return announcementsEntryLocalService.updateEntry(
188 getUserId(), entryId, title, content, url, type, displayDateMonth,
189 displayDateDay, displayDateYear, displayDateHour, displayDateMinute,
190 displayImmediately, expirationDateMonth, expirationDateDay,
191 expirationDateYear, expirationDateHour, expirationDateMinute,
192 priority);
193 }
194
195 }