1 /**
2 * Copyright 2005-2014 The Kuali Foundation
3 *
4 * Licensed under the Educational Community License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.opensource.org/licenses/ecl2.php
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16 package org.kuali.rice.krad.uif.view;
17
18 import org.kuali.rice.kim.api.identity.Person;
19 import org.kuali.rice.krad.uif.container.CollectionGroup;
20 import org.kuali.rice.krad.uif.container.Group;
21 import org.kuali.rice.krad.uif.field.ActionField;
22 import org.kuali.rice.krad.uif.field.DataField;
23 import org.kuali.rice.krad.uif.field.Field;
24 import org.kuali.rice.krad.uif.field.InputField;
25 import org.kuali.rice.krad.uif.widget.Widget;
26 import org.kuali.rice.krad.web.form.UifFormBase;
27
28 import java.util.Set;
29
30 /**
31 * Performs user based authorization for actions and components contained in a {@link View}
32 *
33 * <p>
34 * Note only user authorization is done by the authorizer class. For non-user based logic, use the
35 * {@link ViewPresentationController}
36 * </p>
37 *
38 * @author Kuali Rice Team (rice.collab@kuali.org)
39 */
40 public interface ViewAuthorizer {
41
42 /**
43 * Returns the set of action flags that are authorized for the given user
44 *
45 * <p>
46 * Action flags are created for views to indicate some action or feature should be enabled. These flags can be
47 * used within expressions for configuring the view content.
48 *
49 * For example:
50 * <bean parent="ActionField" p:methodToCall="save" p:actionLabel="save"
51 * p:render="@{#actionFlags[#Constants.KUALI_ACTION_CAN_SAVE]}"/>
52 * </p>
53 *
54 * <p>
55 * For each action flag, KIM is consulted to determine if a permission exist for the template associated with
56 * the action flag. If so, a check is then made to determine if the user has that permission. If the permission
57 * fails for the user, the action flag is removed from the returned set.
58 * </p>
59 *
60 * <p>
61 * The Set of available action flags should first be exported by the
62 * {@link ViewPresentationController#getActionFlags(View, org.kuali.rice.krad.web.form.UifFormBase)} method. The
63 * set returned from this method will be passed as the method argument here by the framework.
64 * </p>
65 *
66 * @param view - view instance the action flags apply to
67 * @param model - object containing the view data
68 * @param user - user we are authorizing the actions for
69 * @param actions - set of action flags to authorize
70 * @return Set<String> set of action flags that have been authorized, this will be equal to or a subset of the
71 * actions passed in
72 */
73 public Set<String> getActionFlags(View view, ViewModel model, Person user, Set<String> actions);
74
75 /**
76 * Returns the set of edit modes that are authorized for the given user
77 *
78 * <p>
79 * An edit mode is a string that identifies a set of editable fields within the view. These are generally used
80 * when the entire view is not editable, but only certain fields. A field can be associated with an edit mode in
81 * two ways. The first is by using the edit mode in an expression when setting the field readOnly property.
82 *
83 * For example:
84 * <property name="readOnly" value="@{!#editModes['specialEdit'] and !fullEdit}" />
85 *
86 * The second way is with the
87 * {@link ViewPresentationController#canEditField(View, ViewModel, org.kuali.rice.krad.uif.field.Field, String)}
88 * method which can look at the edit modes map on the view to determine if the given field should be editable.
89 * </p>
90 *
91 * <p>
92 * For each edit mode, KIM is consulted to determine if a permission exist for the 'Use View' template and
93 * the edit mode detail. If so, a check is then made to determine if the user has that permission. If the
94 * permission
95 * fails for the user, the edit mode is removed from the returned set.
96 * </p>
97 *
98 * <p>
99 * The Set of available edit modes should first be exported by the
100 * {@link ViewPresentationController#getEditModes(View, org.kuali.rice.krad.web.form.UifFormBase)} method. The
101 * set returned from this method will be passed as the method argument here by the framework.
102 * </p>
103 *
104 * @param view - view instance the edit modes apply to
105 * @param model - object containing the view data
106 * @param user - user we are authorizing the actions for
107 * @param editModes - set of edit modes to authorize
108 * @return Set<String> set of edit modes that have been authorized, this will be equal to or a subset of the
109 * edit mode set passed in
110 */
111 public Set<String> getEditModes(View view, ViewModel model, Person user, Set<String> editModes);
112
113 /**
114 * Determines if the given user is authorized to open the given view
115 *
116 * @param view - view instance to check authorization for
117 * @param model - object containing the view data
118 * @param user - user to authorize
119 * @return boolean true if the user is authorized to open the view, false otherwise
120 */
121 public boolean canOpenView(View view, ViewModel model, Person user);
122
123 /**
124 * Determines if the given user is authorized to edit the given view
125 *
126 * @param view - view instance to check authorization for
127 * @param model - object containing the view data
128 * @param user - user to authorize
129 * @return boolean true if the user is authorized to edit the view, false otherwise
130 */
131 public boolean canEditView(View view, ViewModel model, Person user);
132
133 /**
134 * Checks whether the mask authorization exists for the given property and if so whether the given user has the
135 * ability to unmask the value
136 *
137 * @param view - view instance the field belongs to
138 * @param model - object containing the view data
139 * @param field - field associated for the property and from which the
140 * {@link org.kuali.rice.krad.uif.component.ComponentSecurity} will be retrieved
141 * @param propertyName - name of the property associated with the field
142 * @param user - user we are authorizing
143 * @return boolean true if the value can be unmasked, false if it should be masked
144 */
145 public boolean canUnmaskField(View view, ViewModel model, DataField field, String propertyName, Person user);
146
147 /**
148 * Checks whether the partial mask authorization exists for the given property and if so whether the given user
149 * has the ability to unmask the value
150 *
151 * @param view - view instance the field belongs to
152 * @param model - object containing the view data
153 * @param field - field associated for the property and from which the
154 * {@link org.kuali.rice.krad.uif.component.ComponentSecurity} will be retrieved
155 * @param propertyName - name of the property associated with the field
156 * @param user - user we are authorizing
157 * @return boolean true if the value can be unmasked, false if it should be partially masked
158 */
159 public boolean canPartialUnmaskField(View view, ViewModel model, DataField field, String propertyName, Person user);
160
161 public boolean canEditField(View view, ViewModel model, Field field, String propertyName, Person user);
162
163 public boolean canViewField(View view, ViewModel model, Field field, String propertyName, Person user);
164
165 public boolean canEditGroup(View view, ViewModel model, Group group, String groupId, Person user);
166
167 public boolean canViewGroup(View view, ViewModel model, Group group, String groupId, Person user);
168
169 public boolean canEditWidget(View view, ViewModel model, Widget widget, String widgetId, Person user);
170
171 public boolean canViewWidget(View view, ViewModel model, Widget widget, String widgetId, Person user);
172
173 public boolean canPerformAction(View view, ViewModel model, ActionField actionField, String actionEvent,
174 String actionId, Person user);
175
176 public boolean canEditLine(View view, ViewModel model, CollectionGroup collectionGroup,
177 String collectionPropertyName, Object line, Person user);
178
179 public boolean canViewLine(View view, ViewModel model, CollectionGroup collectionGroup,
180 String collectionPropertyName, Object line, Person user);
181
182 public boolean canEditLineField(View view, ViewModel model, CollectionGroup collectionGroup,
183 String collectionPropertyName, Object line, Field field, String propertyName, Person user);
184
185 public boolean canViewLineField(View view, ViewModel model, CollectionGroup collectionGroup,
186 String collectionPropertyName, Object line, Field field, String propertyName, Person user);
187
188 public boolean canPerformLineAction(View view, ViewModel model, CollectionGroup collectionGroup,
189 String collectionPropertyName, Object line, ActionField actionField, String actionEvent, String actionId,
190 Person user);
191
192 }