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