1
22
23 package com.liferay.portal.service.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.security.auth.PrincipalException;
31 import com.liferay.portal.security.permission.ActionKeys;
32 import com.liferay.portal.security.permission.PermissionChecker;
33 import com.liferay.portal.service.OrganizationLocalServiceUtil;
34
35
42 public class OrganizationPermissionImpl implements OrganizationPermission {
43
44 public void check(
45 PermissionChecker permissionChecker, long organizationId,
46 String actionId)
47 throws PortalException, SystemException {
48
49 if (!contains(permissionChecker, organizationId, actionId)) {
50 throw new PrincipalException();
51 }
52 }
53
54 public void check(
55 PermissionChecker permissionChecker, Organization organization,
56 String actionId)
57 throws PortalException, SystemException {
58
59 if (!contains(permissionChecker, organization, actionId)) {
60 throw new PrincipalException();
61 }
62 }
63
64 public boolean contains(
65 PermissionChecker permissionChecker, long organizationId,
66 String actionId)
67 throws PortalException, SystemException {
68
69 if (organizationId > 0) {
70 Organization organization =
71 OrganizationLocalServiceUtil.getOrganization(organizationId);
72
73 return contains(permissionChecker, organization, actionId);
74 }
75 else {
76 return false;
77 }
78 }
79
80 public boolean contains(
81 PermissionChecker permissionChecker, Organization organization,
82 String actionId)
83 throws PortalException, SystemException {
84
85 Group group = organization.getGroup();
86
87 long groupId = group.getGroupId();
88
89 if (contains(permissionChecker, groupId, organization, actionId)) {
90 return true;
91 }
92
93 while (!organization.isRoot()) {
94 Organization parentOrganization =
95 organization.getParentOrganization();
96
97 Group parentGroup = parentOrganization.getGroup();
98
99 groupId = parentGroup.getGroupId();
100
101 if (contains(
102 permissionChecker, groupId, parentOrganization,
103 ActionKeys.MANAGE_SUBORGANIZATIONS)) {
104
105 return true;
106 }
107
108 organization = parentOrganization;
109 }
110
111 return false;
112 }
113
114 protected boolean contains(
115 PermissionChecker permissionChecker, long groupId,
116 Organization organization, String actionId)
117 throws PortalException, SystemException {
118
119 while ((organization != null) &&
120 (organization.getOrganizationId() !=
121 OrganizationConstants.DEFAULT_PARENT_ORGANIZATION_ID)) {
122
123 if (permissionChecker.hasPermission(
124 groupId, Organization.class.getName(),
125 organization.getOrganizationId(), actionId)) {
126
127 return true;
128 }
129
130 organization = organization.getParentOrganization();
131 }
132
133 return false;
134 }
135
136 }