1
22
23 package com.liferay.portal.service.permission;
24
25 import com.liferay.portal.NoSuchResourceException;
26 import com.liferay.portal.PortalException;
27 import com.liferay.portal.SystemException;
28 import com.liferay.portal.model.Group;
29 import com.liferay.portal.model.Layout;
30 import com.liferay.portal.model.LayoutConstants;
31 import com.liferay.portal.model.ResourceConstants;
32 import com.liferay.portal.security.auth.PrincipalException;
33 import com.liferay.portal.security.permission.ActionKeys;
34 import com.liferay.portal.security.permission.PermissionChecker;
35 import com.liferay.portal.service.GroupLocalServiceUtil;
36 import com.liferay.portal.service.LayoutLocalServiceUtil;
37 import com.liferay.portal.service.ResourceLocalServiceUtil;
38 import com.liferay.portal.service.ResourcePermissionLocalServiceUtil;
39 import com.liferay.portal.util.PropsValues;
40
41
47 public class LayoutPermissionImpl implements LayoutPermission {
48
49 public void check(
50 PermissionChecker permissionChecker, long plid, String actionId)
51 throws PortalException, SystemException {
52
53 if (!contains(permissionChecker, plid, actionId)) {
54 throw new PrincipalException();
55 }
56 }
57
58 public void check(
59 PermissionChecker permissionChecker, long groupId,
60 boolean privateLayout, long layoutId, String actionId)
61 throws PortalException, SystemException {
62
63 if (!contains(
64 permissionChecker, groupId, privateLayout, layoutId,
65 actionId)) {
66
67 throw new PrincipalException();
68 }
69 }
70
71 public void check(
72 PermissionChecker permissionChecker, Layout layout, String actionId)
73 throws PortalException, SystemException {
74
75 if (!contains(permissionChecker, layout, actionId)) {
76 throw new PrincipalException();
77 }
78 }
79
80 public boolean contains(
81 PermissionChecker permissionChecker, long plid, String actionId)
82 throws PortalException, SystemException {
83
84 Layout layout = LayoutLocalServiceUtil.getLayout(plid);
85
86 return contains(permissionChecker, layout, actionId);
87 }
88
89 public boolean contains(
90 PermissionChecker permissionChecker, long groupId,
91 boolean privateLayout, long layoutId, String actionId)
92 throws PortalException, SystemException {
93
94 if (layoutId == LayoutConstants.DEFAULT_PARENT_LAYOUT_ID) {
95 if (GroupPermissionUtil.contains(
96 permissionChecker, groupId, ActionKeys.MANAGE_LAYOUTS)) {
97
98 return true;
99 }
100 else {
101 return false;
102 }
103 }
104 else {
105 Layout layout = LayoutLocalServiceUtil.getLayout(
106 groupId, privateLayout, layoutId);
107
108 return contains(permissionChecker, layout, actionId);
109 }
110 }
111
112 public boolean contains(
113 PermissionChecker permissionChecker, Layout layout, String actionId)
114 throws PortalException, SystemException {
115
116 if ((layout.isPrivateLayout() &&
117 !PropsValues.LAYOUT_USER_PRIVATE_LAYOUTS_MODIFIABLE) ||
118 (layout.isPublicLayout() &&
119 !PropsValues.LAYOUT_USER_PUBLIC_LAYOUTS_MODIFIABLE)) {
120
121 if (actionId.equals(ActionKeys.UPDATE)) {
122 Group group = GroupLocalServiceUtil.getGroup(
123 layout.getGroupId());
124
125 if (group.isUser()) {
126 return false;
127 }
128 }
129 }
130
131 if (GroupPermissionUtil.contains(
132 permissionChecker, layout.getGroupId(),
133 ActionKeys.MANAGE_LAYOUTS)) {
134
135 return true;
136 }
137
138 try {
139 if (PropsValues.PERMISSIONS_USER_CHECK_ALGORITHM == 6) {
140 if (ResourcePermissionLocalServiceUtil.
141 getResourcePermissionsCount(
142 layout.getCompanyId(), Layout.class.getName(),
143 ResourceConstants.SCOPE_INDIVIDUAL,
144 String.valueOf(layout.getPlid())) == 0) {
145
146 throw new NoSuchResourceException();
147 }
148 }
149 else {
150 ResourceLocalServiceUtil.getResource(
151 layout.getCompanyId(), Layout.class.getName(),
152 ResourceConstants.SCOPE_INDIVIDUAL,
153 String.valueOf(layout.getPlid()));
154 }
155 }
156 catch (NoSuchResourceException nsre) {
157 boolean addCommunityPermission = true;
158 boolean addGuestPermission = true;
159
160 if (layout.isPrivateLayout()) {
161 addGuestPermission = false;
162 }
163
164 ResourceLocalServiceUtil.addResources(
165 layout.getCompanyId(), layout.getGroupId(), 0,
166 Layout.class.getName(), layout.getPlid(), false,
167 addCommunityPermission, addGuestPermission);
168 }
169
170 return permissionChecker.hasPermission(
171 layout.getGroupId(), Layout.class.getName(), layout.getPlid(),
172 actionId);
173 }
174
175 }