001
014
015 package com.liferay.portal.service.permission;
016
017 import com.liferay.portal.kernel.exception.PortalException;
018 import com.liferay.portal.kernel.exception.SystemException;
019 import com.liferay.portal.kernel.util.ArrayUtil;
020 import com.liferay.portal.model.Organization;
021 import com.liferay.portal.model.OrganizationConstants;
022 import com.liferay.portal.security.auth.PrincipalException;
023 import com.liferay.portal.security.permission.ActionKeys;
024 import com.liferay.portal.security.permission.PermissionChecker;
025 import com.liferay.portal.service.OrganizationLocalServiceUtil;
026
027
032 public class OrganizationPermissionImpl implements OrganizationPermission {
033
034 @Override
035 public void check(
036 PermissionChecker permissionChecker, long organizationId,
037 String actionId)
038 throws PortalException, SystemException {
039
040 if (!contains(permissionChecker, organizationId, actionId)) {
041 throw new PrincipalException();
042 }
043 }
044
045 @Override
046 public void check(
047 PermissionChecker permissionChecker, Organization organization,
048 String actionId)
049 throws PortalException, SystemException {
050
051 if (!contains(permissionChecker, organization, actionId)) {
052 throw new PrincipalException();
053 }
054 }
055
056 @Override
057 public boolean contains(
058 PermissionChecker permissionChecker, long organizationId,
059 String actionId)
060 throws PortalException, SystemException {
061
062 if (organizationId > 0) {
063 Organization organization =
064 OrganizationLocalServiceUtil.getOrganization(organizationId);
065
066 return contains(permissionChecker, organization, actionId);
067 }
068 else {
069 return false;
070 }
071 }
072
073 @Override
074 public boolean contains(
075 PermissionChecker permissionChecker, long[] organizationIds,
076 String actionId)
077 throws PortalException, SystemException {
078
079 if (ArrayUtil.isEmpty(organizationIds)) {
080 return true;
081 }
082
083 for (long organizationId : organizationIds) {
084 check(permissionChecker, organizationId, actionId);
085 }
086
087 return true;
088 }
089
090 @Override
091 public boolean contains(
092 PermissionChecker permissionChecker, Organization organization,
093 String actionId)
094 throws PortalException, SystemException {
095
096 long groupId = organization.getGroupId();
097
098 if (contains(permissionChecker, groupId, organization, actionId)) {
099 return true;
100 }
101
102 while (!organization.isRoot()) {
103 Organization parentOrganization =
104 organization.getParentOrganization();
105
106 groupId = parentOrganization.getGroupId();
107
108 if (contains(
109 permissionChecker, groupId, parentOrganization,
110 ActionKeys.MANAGE_SUBORGANIZATIONS)) {
111
112 return true;
113 }
114
115 organization = parentOrganization;
116 }
117
118 return false;
119 }
120
121 protected boolean contains(
122 PermissionChecker permissionChecker, long groupId,
123 Organization organization, String actionId)
124 throws PortalException, SystemException {
125
126 while ((organization != null) &&
127 (organization.getOrganizationId() !=
128 OrganizationConstants.DEFAULT_PARENT_ORGANIZATION_ID)) {
129
130 if (actionId.equals(ActionKeys.ADD_ORGANIZATION) &&
131 (permissionChecker.hasPermission(
132 groupId, Organization.class.getName(),
133 organization.getOrganizationId(),
134 ActionKeys.MANAGE_SUBORGANIZATIONS) ||
135 PortalPermissionUtil.contains(
136 permissionChecker, ActionKeys.ADD_ORGANIZATION))) {
137
138 return true;
139 }
140 else if (permissionChecker.hasPermission(
141 groupId, Organization.class.getName(),
142 organization.getOrganizationId(), actionId)) {
143
144 return true;
145 }
146
147 organization = organization.getParentOrganization();
148 }
149
150 return false;
151 }
152
153 }