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