1
22
23 package com.liferay.portal.security.permission;
24
25 import com.liferay.portal.PortalException;
26 import com.liferay.portal.SystemException;
27 import com.liferay.portal.model.Group;
28 import com.liferay.portal.model.Organization;
29 import com.liferay.portal.model.OrganizationConstants;
30 import com.liferay.portal.model.Role;
31 import com.liferay.portal.model.impl.RoleImpl;
32 import com.liferay.portal.service.OrganizationLocalServiceUtil;
33 import com.liferay.portal.service.UserGroupRoleLocalServiceUtil;
34
35 import java.util.HashMap;
36 import java.util.List;
37 import java.util.Map;
38
39
45 public class PermissionCheckerBagImpl implements PermissionCheckerBag {
46
47 public PermissionCheckerBagImpl() {
48 }
49
50 public PermissionCheckerBagImpl(
51 long userId, List<Group> userGroups, List<Organization> userOrgs,
52 List<Group> userOrgGroups, List<Group> userUserGroupGroups,
53 List<Group> groups, List<Role> roles) {
54
55 _userId = userId;
56 _userGroups = userGroups;
57 _userOrgs = userOrgs;
58 _userOrgGroups = userOrgGroups;
59 _userUserGroupGroups = userUserGroupGroups;
60 _groups = groups;
61 _roles = roles;
62 }
63
64 public List<Group> getUserGroups() {
65 return _userGroups;
66 }
67
68 public List<Organization> getUserOrgs() {
69 return _userOrgs;
70 }
71
72 public List<Group> getUserOrgGroups() {
73 return _userOrgGroups;
74 }
75
76 public List<Group> getUserUserGroupGroups() {
77 return _userUserGroupGroups;
78 }
79
80 public List<Group> getGroups() {
81 return _groups;
82 }
83
84 public List<Role> getRoles() {
85 return _roles;
86 }
87
88 public boolean isCommunityAdmin(
89 PermissionChecker permissionChecker, Group group)
90 throws Exception {
91
92 Boolean value = _communityAdmins.get(group.getGroupId());
93
94 if (value == null) {
95 value = Boolean.valueOf(
96 isCommunityAdminImpl(permissionChecker, group));
97
98 _communityAdmins.put(group.getGroupId(), value);
99 }
100
101 return value.booleanValue();
102 }
103
104 public boolean isCommunityOwner(
105 PermissionChecker permissionChecker, Group group)
106 throws Exception {
107
108 Boolean value = _communityOwners.get(group.getGroupId());
109
110 if (value == null) {
111 value = Boolean.valueOf(
112 isCommunityOwnerImpl(permissionChecker, group));
113
114 _communityOwners.put(group.getGroupId(), value);
115 }
116
117 return value.booleanValue();
118 }
119
120 protected boolean isCommunityAdminImpl(
121 PermissionChecker permissionChecker, Group group)
122 throws PortalException, SystemException {
123
124 if (group.isCommunity()) {
125 if (UserGroupRoleLocalServiceUtil.hasUserGroupRole(
126 _userId, group.getGroupId(),
127 RoleImpl.COMMUNITY_ADMINISTRATOR) ||
128 UserGroupRoleLocalServiceUtil.hasUserGroupRole(
129 _userId, group.getGroupId(), RoleImpl.COMMUNITY_OWNER)) {
130
131 return true;
132 }
133 }
134 else if (group.isOrganization()) {
135 long organizationId = group.getClassPK();
136
137 while (organizationId !=
138 OrganizationConstants.DEFAULT_PARENT_ORGANIZATION_ID) {
139
140 Organization organization =
141 OrganizationLocalServiceUtil.getOrganization(
142 organizationId);
143
144 Group organizationGroup = organization.getGroup();
145
146 long organizationGroupId = organizationGroup.getGroupId();
147
148 if (UserGroupRoleLocalServiceUtil.hasUserGroupRole(
149 _userId, organizationGroupId,
150 RoleImpl.ORGANIZATION_ADMINISTRATOR) ||
151 UserGroupRoleLocalServiceUtil.hasUserGroupRole(
152 _userId, organizationGroupId,
153 RoleImpl.ORGANIZATION_OWNER)) {
154
155 return true;
156 }
157
158 organizationId = organization.getParentOrganizationId();
159 }
160 }
161 else if (group.isUser()) {
162 long userId = group.getClassPK();
163
164 if (userId == _userId) {
165 return true;
166 }
167 }
168
169 return false;
170 }
171
172 protected boolean isCommunityOwnerImpl(
173 PermissionChecker permissionChecker, Group group)
174 throws PortalException, SystemException {
175
176 if (group.isCommunity()) {
177 if (UserGroupRoleLocalServiceUtil.hasUserGroupRole(
178 _userId, group.getGroupId(), RoleImpl.COMMUNITY_OWNER)) {
179
180 return true;
181 }
182 }
183 else if (group.isOrganization()) {
184 long organizationId = group.getClassPK();
185
186 while (organizationId !=
187 OrganizationConstants.DEFAULT_PARENT_ORGANIZATION_ID) {
188
189 Organization organization =
190 OrganizationLocalServiceUtil.getOrganization(
191 organizationId);
192
193 Group organizationGroup = organization.getGroup();
194
195 long organizationGroupId = organizationGroup.getGroupId();
196
197 if (UserGroupRoleLocalServiceUtil.hasUserGroupRole(
198 _userId, organizationGroupId,
199 RoleImpl.ORGANIZATION_OWNER)) {
200
201 return true;
202 }
203
204 organizationId = organization.getParentOrganizationId();
205 }
206 }
207 else if (group.isUser()) {
208 long userId = group.getClassPK();
209
210 if (userId == _userId) {
211 return true;
212 }
213 }
214
215 return false;
216 }
217
218 private long _userId;
219 private List<Group> _userGroups;
220 private List<Organization> _userOrgs;
221 private List<Group> _userOrgGroups;
222 private List<Group> _userUserGroupGroups;
223 private List<Group> _groups;
224 private List<Role> _roles;
225 private Map<Long, Boolean> _communityAdmins = new HashMap<Long, Boolean>();
226 private Map<Long, Boolean> _communityOwners = new HashMap<Long, Boolean>();
227
228 }