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
031 public class OrganizationPermissionImpl implements OrganizationPermission {
032
033 public void check(
034 PermissionChecker permissionChecker, long organizationId,
035 String actionId)
036 throws PortalException, SystemException {
037
038 if (!contains(permissionChecker, organizationId, actionId)) {
039 throw new PrincipalException();
040 }
041 }
042
043 public void check(
044 PermissionChecker permissionChecker, Organization organization,
045 String actionId)
046 throws PortalException, SystemException {
047
048 if (!contains(permissionChecker, organization, actionId)) {
049 throw new PrincipalException();
050 }
051 }
052
053 public boolean contains(
054 PermissionChecker permissionChecker, long organizationId,
055 String actionId)
056 throws PortalException, SystemException {
057
058 if (organizationId > 0) {
059 Organization organization =
060 OrganizationLocalServiceUtil.getOrganization(organizationId);
061
062 return contains(permissionChecker, organization, actionId);
063 }
064 else {
065 return false;
066 }
067 }
068
069 public boolean contains(
070 PermissionChecker permissionChecker, long[] organizationIds,
071 String actionId)
072 throws PortalException, SystemException {
073
074 if ((organizationIds == null) || (organizationIds.length == 0)) {
075 return true;
076 }
077
078 for (long organizationId : organizationIds) {
079 check(permissionChecker, organizationId, actionId);
080 }
081
082 return true;
083 }
084
085 public boolean contains(
086 PermissionChecker permissionChecker, Organization organization,
087 String actionId)
088 throws PortalException, SystemException {
089
090 Group group = organization.getGroup();
091
092 long groupId = group.getGroupId();
093
094 if (contains(permissionChecker, groupId, organization, actionId)) {
095 return true;
096 }
097
098 while (!organization.isRoot()) {
099 Organization parentOrganization =
100 organization.getParentOrganization();
101
102 Group parentGroup = parentOrganization.getGroup();
103
104 groupId = parentGroup.getGroupId();
105
106 if (contains(
107 permissionChecker, groupId, parentOrganization,
108 ActionKeys.MANAGE_SUBORGANIZATIONS)) {
109
110 return true;
111 }
112
113 organization = parentOrganization;
114 }
115
116 return false;
117 }
118
119 protected boolean contains(
120 PermissionChecker permissionChecker, long groupId,
121 Organization organization, String actionId)
122 throws PortalException, SystemException {
123
124 while ((organization != null) &&
125 (organization.getOrganizationId() !=
126 OrganizationConstants.DEFAULT_PARENT_ORGANIZATION_ID)) {
127
128 if (permissionChecker.hasPermission(
129 groupId, Organization.class.getName(),
130 organization.getOrganizationId(), actionId)) {
131
132 return true;
133 }
134
135 organization = organization.getParentOrganization();
136 }
137
138 return false;
139 }
140
141 }