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.model.Group;
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 ((organizationIds == null) || (organizationIds.length == 0)) {
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 Group group = organization.getGroup();
097
098 long groupId = group.getGroupId();
099
100 if (contains(permissionChecker, groupId, organization, actionId)) {
101 return true;
102 }
103
104 while (!organization.isRoot()) {
105 Organization parentOrganization =
106 organization.getParentOrganization();
107
108 Group parentGroup = parentOrganization.getGroup();
109
110 groupId = parentGroup.getGroupId();
111
112 if (contains(
113 permissionChecker, groupId, parentOrganization,
114 ActionKeys.MANAGE_SUBORGANIZATIONS)) {
115
116 return true;
117 }
118
119 organization = parentOrganization;
120 }
121
122 return false;
123 }
124
125 protected boolean contains(
126 PermissionChecker permissionChecker, long groupId,
127 Organization organization, String actionId)
128 throws PortalException, SystemException {
129
130 while ((organization != null) &&
131 (organization.getOrganizationId() !=
132 OrganizationConstants.DEFAULT_PARENT_ORGANIZATION_ID)) {
133
134 if (actionId.equals(ActionKeys.ADD_ORGANIZATION) &&
135 permissionChecker.hasPermission(
136 groupId, Organization.class.getName(),
137 organization.getOrganizationId(),
138 ActionKeys.MANAGE_SUBORGANIZATIONS) ||
139 PortalPermissionUtil.contains(
140 permissionChecker, ActionKeys.ADD_ORGANIZATION)) {
141
142 return true;
143 }
144 else if (permissionChecker.hasPermission(
145 groupId, Organization.class.getName(),
146 organization.getOrganizationId(), actionId)) {
147
148 return true;
149 }
150
151 organization = organization.getParentOrganization();
152 }
153
154 return false;
155 }
156
157 }