001 /**
002 * Copyright 2005-2012 The Kuali Foundation
003 *
004 * Licensed under the Educational Community License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.opensource.org/licenses/ecl2.php
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package org.kuali.rice.krad.uif.component;
017
018 import org.kuali.rice.krad.datadictionary.parse.BeanTag;
019 import org.kuali.rice.krad.datadictionary.parse.BeanTagAttribute;
020 import org.kuali.rice.krad.datadictionary.uif.UifDictionaryBeanBase;
021
022 import java.io.Serializable;
023 import java.util.HashMap;
024 import java.util.Map;
025
026 /**
027 * Component security is used to flag permissions that exist in KIM for various component state (like edit and view)
028 *
029 * <p>
030 * In addition, properties such as additional role and permission details can be configured to use when
031 * checking the KIM permissions
032 * </p>
033 *
034 * <p>
035 * Security subclasses exist adding on flags apporiate for that component
036 * </p>
037 *
038 * @author Kuali Rice Team (rice.collab@kuali.org)
039 */
040 @BeanTag(name="componentSecurity")
041 public class ComponentSecurity extends UifDictionaryBeanBase implements Serializable {
042 private static final long serialVersionUID = 726347449984853891L;
043
044 private boolean editAuthz;
045 private boolean viewAuthz;
046
047 private String namespaceAttribute;
048 private String componentAttribute;
049 private String idAttribute;
050
051 private Map<String, String> additionalPermissionDetails;
052 private Map<String, String> additionalRoleQualifiers;
053
054 public ComponentSecurity() {
055 editAuthz = false;
056 viewAuthz = false;
057
058 additionalPermissionDetails = new HashMap<String, String>();
059 additionalRoleQualifiers = new HashMap<String, String>();
060 }
061
062 /**
063 * Indicates whether the component has edit authorization and KIM should be consulted
064 *
065 * @return boolean true if the component has edit authorization, false if not
066 */
067 @BeanTagAttribute(name="editAuthz")
068 public boolean isEditAuthz() {
069 return editAuthz;
070 }
071
072 /**
073 * Setter for the edit authorization flag
074 *
075 * @param editAuthz
076 */
077 public void setEditAuthz(boolean editAuthz) {
078 this.editAuthz = editAuthz;
079 }
080
081 /**
082 * Indicates whether the component has view authorization and KIM should be consulted
083 *
084 * @return boolean true if the component has view authorization, false if not
085 */
086 @BeanTagAttribute(name="viewAuthz")
087 public boolean isViewAuthz() {
088 return viewAuthz;
089 }
090
091 /**
092 * Setter for the view authorization flag
093 *
094 * @param viewAuthz
095 */
096 public void setViewAuthz(boolean viewAuthz) {
097 this.viewAuthz = viewAuthz;
098 }
099
100 /**
101 * Namespace code that should be sent as permission detail when doing a permission check on this field
102 *
103 * <p>
104 * When the namespace code is a detail for a permission check, this property can be configured to override the
105 * namespace derived by the system
106 * </p>
107 *
108 * @return String namespace code
109 */
110 @BeanTagAttribute(name="namespaceAttribute")
111 public String getNamespaceAttribute() {
112 return namespaceAttribute;
113 }
114
115 /**
116 * Setter for the namespace code to use for details
117 *
118 * @param namespaceAttribute
119 */
120 public void setNamespaceAttribute(String namespaceAttribute) {
121 this.namespaceAttribute = namespaceAttribute;
122 }
123
124 /**
125 * Component code that should be sent as permission detail when doing a permission check on this field
126 *
127 * <p>
128 * When the component code is a detail for a permission check, this property can be configured to override the
129 * component code derived by the system
130 * </p>
131 *
132 * @return String component code
133 */
134 @BeanTagAttribute(name="componentAttribute")
135 public String getComponentAttribute() {
136 return componentAttribute;
137 }
138
139 /**
140 * Setter for the component code to use for details
141 *
142 * @param componentAttribute
143 */
144 public void setComponentAttribute(String componentAttribute) {
145 this.componentAttribute = componentAttribute;
146 }
147
148 /**
149 * Id that should be sent as permission detail when doing a permission check on this field
150 *
151 * <p>
152 * By default they system will send the component id as a permission detail, this property can be configured to
153 * send a different id for the permission check
154 * </p>
155 *
156 * @return String id
157 */
158 @BeanTagAttribute(name="idAttribute")
159 public String getIdAttribute() {
160 return idAttribute;
161 }
162
163 /**
164 * Setter for the id to use for details
165 *
166 * @param idAttribute
167 */
168 public void setIdAttribute(String idAttribute) {
169 this.idAttribute = idAttribute;
170 }
171
172 /**
173 * Map of key value pairs that should be added as permission details when doing KIM permission checks for this
174 * component
175 *
176 * <p>
177 * Any details given here that will override details with the same key that were derived by the system
178 * </p>
179 *
180 * @return Map<String, String>
181 */
182 @BeanTagAttribute(name="additionalPermissionDetails",type= BeanTagAttribute.AttributeType.MAPVALUE)
183 public Map<String, String> getAdditionalPermissionDetails() {
184 return additionalPermissionDetails;
185 }
186
187 /**
188 * Setter for the map of additional permission details
189 *
190 * @param additionalPermissionDetails
191 */
192 public void setAdditionalPermissionDetails(Map<String, String> additionalPermissionDetails) {
193 this.additionalPermissionDetails = additionalPermissionDetails;
194 }
195
196 /**
197 * Map of key value pairs that should be added as role qualifiers when doing KIM permission checks for this
198 * component
199 *
200 * <p>
201 * Any qualifiers given here that will override qualifiers with the same key that were derived by the system
202 * </p>
203 *
204 * @return Map<String, String>
205 */
206 @BeanTagAttribute(name="additionalRoleQualifiers",type= BeanTagAttribute.AttributeType.MAPVALUE)
207 public Map<String, String> getAdditionalRoleQualifiers() {
208 return additionalRoleQualifiers;
209 }
210
211 /**
212 * Setter for the map of additional role qualifiers
213 *
214 * @param additionalRoleQualifiers
215 */
216 public void setAdditionalRoleQualifiers(Map<String, String> additionalRoleQualifiers) {
217 this.additionalRoleQualifiers = additionalRoleQualifiers;
218 }
219
220 @Override
221 protected void finalize() throws Throwable {
222 try {
223 idAttribute = null;
224 componentAttribute = null;
225 namespaceAttribute = null;
226 additionalRoleQualifiers = null;
227 additionalPermissionDetails = null;
228 } finally {
229 // don't call super.finalize() in attempt to avoid loop between maps.
230 }
231 }
232 }