1 /*
2 * Copyright 2008 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.ole.sys.document.authorization;
17
18 import java.util.List;
19 import java.util.Set;
20
21 import org.kuali.ole.sys.businessobject.AccountingLine;
22 import org.kuali.ole.sys.document.AccountingDocument;
23 import org.kuali.ole.sys.document.web.AccountingLineRenderingContext;
24 import org.kuali.ole.sys.document.web.AccountingLineViewAction;
25 import org.kuali.rice.kim.api.identity.Person;
26
27 /**
28 * Methods used to determine certain permissions associated with an accounting line.
29 */
30 public interface AccountingLineAuthorizer {
31
32 /**
33 * Determines which, if any, blocks whose children elements should not in any fashion be rendered
34 *
35 * @param accountingDocument the accounting document the line to authorize is owned by
36 * @param accountingLine the accounting line that is being authorized against
37 * @param newLine whether the line is a new line or not
38 * @return a Set of the names of blocks that should not being in any way rendered
39 */
40 public abstract Set<String> getUnviewableBlocks(AccountingDocument accountingDocument, AccountingLine accountingLine, boolean newLine, Person currentUser);
41
42 /**
43 * Determines what actions are available to act upon the given accounting line
44 *
45 * @param accountingDocument the accounting document the line to authorize is owned by
46 * @param accountingLineRenderingContext a renderable context wrapping the accounting line that is being authorized against
47 * @param accountingLinePropertyName the name of the property that represents the accounting line
48 * @param lineIndex value, as Integer, of the index of the given accounting line within the group's collection of accounting
49 * lines; if null, then it is assumed that this is a new line
50 * @param groupTitle title of the group from the data dictionary
51 * @return a List of the Actions that are available for this line
52 */
53 public abstract List<AccountingLineViewAction> getActions(AccountingDocument accountingDocument, AccountingLineRenderingContext accountingLineRenderingContext, String accountingLinePropertyName, Integer lineIndex, Person currentUser, String groupTitle);
54
55 /**
56 * Determines if new lines should be rendered for the given accounting line group (identified by its property name)
57 *
58 * @param accountingDocument the document that has accounting lines being authorized
59 * @param accountingGroupProperty the property of this accounting group
60 * @return true if new lines should be displayed, false otherwise
61 */
62 public abstract boolean renderNewLine(AccountingDocument accountingDocument, String accountingGroupProperty);
63
64 /**
65 * Determines if any entire group is rendered as editable, which means that a new line will appear
66 *
67 * @param accountingDocument the accounting document which the collection of line are on
68 * @param accountingLineRenderingContexts the accounting lines of the group, wrapped in AccountingLineRenderingContext implementations
69 * @param currentUser the current user
70 * @return true if the group can be edited, false otherwise
71 */
72 public abstract boolean isGroupEditable(AccountingDocument accountingDocument, List<? extends AccountingLineRenderingContext> accountingLineRenderingContexts, Person currentUser);
73
74 /**
75 * determine whether the current user has permission to edit the given field in the given accounting line
76 *
77 * @param accountingDocument the given accounting document
78 * @param accountingLine the given accounting line in the document
79 * @param accountingLineCollectionProperty the property of the collection the given accounting line is in
80 * @param fieldName the name of a field in the given accounting line
81 * @param editableLine whether the parent line of this field is editable
82 * @param editablePage whether the parent page of this field is editable
83 * @param currentUser the current user
84 * @return true if the the current user has permission to edit the given field in the given accounting line; otherwsie, false
85 */
86 public abstract boolean hasEditPermissionOnField(AccountingDocument accountingDocument, AccountingLine accountingLine, String accountingLineCollectionProperty, String fieldName, boolean editableLine, boolean editablePage, Person currentUser);
87
88 /**
89 * determine whether the current user has permission to edit the given accounting line as a whole
90 *
91 * @param accountingDocument the given accounting document
92 * @param accountingLine the given accounting line in the document
93 * @param accountingLineCollectionProperty the property of the group that holds these accounting lines
94 * @param currentUser the current user
95 * @param pageIsEditable whether the current page is editable by the current user or not
96 * @return true if the the current user has permission to edit the given accounting line; otherwsie, false
97 */
98 public abstract boolean hasEditPermissionOnAccountingLine(AccountingDocument accountingDocument, AccountingLine accountingLine, String accountingLineCollectionProperty, Person currentUser, boolean pageIsEditable);
99 }