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 boolean contains(
55 PermissionChecker permissionChecker, long organizationId,
56 String actionId)
57 throws PortalException, SystemException {
58
59 Organization organization = null;
60
61 long groupId = 0;
62 long parentOrganizationId =
63 OrganizationConstants.DEFAULT_PARENT_ORGANIZATION_ID;
64
65 if (organizationId > 0) {
66 organization = OrganizationLocalServiceUtil.getOrganization(
67 organizationId);
68
69 Group group = organization.getGroup();
70
71 groupId = group.getGroupId();
72 parentOrganizationId = organization.getParentOrganizationId();
73 }
74
75 if (contains(permissionChecker, groupId, organizationId, actionId)) {
76 return true;
77 }
78
79 if ((!actionId.equals(ActionKeys.MANAGE_SUBORGANIZATIONS)) &&
80 (organization != null)) {
81
82 if (!organization.isRoot()) {
83 Organization parentOrganization =
84 organization.getParentOrganization();
85
86 Group parentGroup = parentOrganization.getGroup();
87
88 groupId = parentGroup.getGroupId();
89 parentOrganizationId = parentOrganization.getOrganizationId();
90 }
91
92 if (contains(
93 permissionChecker, groupId, parentOrganizationId,
94 ActionKeys.MANAGE_SUBORGANIZATIONS)) {
95
96 return true;
97 }
98 }
99
100 return false;
101 }
102
103 protected boolean contains(
104 PermissionChecker permissionChecker, long groupId,
105 long organizationId, String actionId)
106 throws PortalException, SystemException {
107
108 while (organizationId !=
109 OrganizationConstants.DEFAULT_PARENT_ORGANIZATION_ID) {
110
111 if (permissionChecker.hasPermission(
112 groupId, Organization.class.getName(), organizationId,
113 actionId)) {
114
115 return true;
116 }
117
118 Organization organization =
119 OrganizationLocalServiceUtil.getOrganization(organizationId);
120
121 organizationId = organization.getParentOrganizationId();
122 }
123
124 return false;
125 }
126
127 }