source: trunk/www/admin/roles/edit_role.jsp @ 6684

Last change on this file since 6684 was 6684, checked in by Nicklas Nordborg, 8 years ago

Merge changes between 3.4-beta-1 to 3.4.0 to the trunk.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
File size: 13.7 KB
Line 
1<%-- $Id: edit_role.jsp 6684 2015-01-14 13:29:04Z nicklas $
2  ------------------------------------------------------------------
3  Copyright (C) 2005 Nicklas Nordborg
4  Copyright (C) 2006 Jari Häkkinen, Nicklas Nordborg, Martin Svensson
5  Copyright (C) 2007 Nicklas Nordborg
6
7  This file is part of BASE - BioArray Software Environment.
8  Available at http://base.thep.lu.se/
9
10  BASE is free software; you can redistribute it and/or
11  modify it under the terms of the GNU General Public License
12  as published by the Free Software Foundation; either version 3
13  of the License, or (at your option) any later version.
14
15  BASE is distributed in the hope that it will be useful,
16  but WITHOUT ANY WARRANTY; without even the implied warranty of
17  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  GNU General Public License for more details.
19
20  You should have received a copy of the GNU General Public License
21  along with BASE. If not, see <http://www.gnu.org/licenses/>.
22  ------------------------------------------------------------------
23
24
25  @author Nicklas
26  @version 2.0
27--%>
28<%@ page pageEncoding="UTF-8" session="false"
29  import="net.sf.basedb.core.SessionControl"
30  import="net.sf.basedb.core.DbControl"
31  import="net.sf.basedb.core.SystemItems"
32  import="net.sf.basedb.core.Item"
33  import="net.sf.basedb.core.ItemContext"
34  import="net.sf.basedb.core.Include"
35  import="net.sf.basedb.core.Permission"
36  import="net.sf.basedb.core.User"
37  import="net.sf.basedb.core.Role"
38  import="net.sf.basedb.core.RoleKey"
39  import="net.sf.basedb.core.ItemQuery"
40  import="net.sf.basedb.core.ItemResultList"
41  import="net.sf.basedb.core.BaseException"
42  import="net.sf.basedb.core.PermissionDeniedException"
43  import="net.sf.basedb.core.query.Orders"
44  import="net.sf.basedb.core.query.Hql"
45  import="net.sf.basedb.clients.web.Base"
46  import="net.sf.basedb.clients.web.PermissionUtil"
47  import="net.sf.basedb.clients.web.util.HTML"
48  import="net.sf.basedb.util.Values"
49  import="net.sf.basedb.core.plugin.GuiContext"
50  import="net.sf.basedb.clients.web.extensions.ExtensionsControl"
51  import="net.sf.basedb.clients.web.extensions.JspContext"
52  import="net.sf.basedb.clients.web.extensions.edit.EditUtil"
53  import="net.sf.basedb.util.extensions.ExtensionsInvoker"
54  import="net.sf.basedb.util.json.JsonUtil"
55  import="net.sf.basedb.util.json.NameableConverter"
56  import="java.util.EnumSet"
57  import="java.util.Set"
58  import="java.util.Map"
59  import="java.util.List"
60  import="org.json.simple.JSONArray"
61  import="org.json.simple.JSONObject"
62%>
63<%@ taglib prefix="base" uri="/WEB-INF/base.tld" %>
64<%@ taglib prefix="t" uri="/WEB-INF/tab.tld" %>
65<%@ taglib prefix="ext" uri="/WEB-INF/extensions.tld" %>
66<%!
67private static final int DENY_CODE = PermissionUtil.getPermissionCode(EnumSet.of(Permission.DENIED));
68private static final int CREATE_CODE = PermissionUtil.getPermissionCode(EnumSet.of(Permission.CREATE));
69private static final int READ_CODE = PermissionUtil.getPermissionCode(EnumSet.of(Permission.READ));
70private static final int USE_CODE = PermissionUtil.getPermissionCode(EnumSet.of(Permission.USE));
71private static final int WRITE_CODE = PermissionUtil.getPermissionCode(EnumSet.of(Permission.WRITE));
72private static final int DELETE_CODE = PermissionUtil.getPermissionCode(EnumSet.of(Permission.DELETE));
73private static final int SET_OWNER_CODE = PermissionUtil.getPermissionCode(EnumSet.of(Permission.SET_OWNER));
74private static final int SET_PERMISSION_CODE = PermissionUtil.getPermissionCode(EnumSet.of(Permission.SET_PERMISSION));
75
76private String getOption(DbControl dc, Role role, Item itemType)
77  throws BaseException
78{
79  int keyId = SystemItems.getRoleKeyId(itemType);
80  if (keyId == 0) return "";
81
82  RoleKey key = RoleKey.getById(dc, keyId);
83  Set<Permission> permissions = role == null ? EnumSet.noneOf(Permission.class) : key.getPermissions(role);
84  StringBuilder sb = new StringBuilder();
85  sb.append("<option value=\"").append(key.getItemType().name()).append("\">");
86  sb.append(HTML.encodeTags(key.getName()));
87  sb.append(" [");
88  if (permissions.contains(Permission.DENIED)) 
89  {
90    sb.append("DENIED");
91  }
92  else
93  {
94    Set<Permission> defined = itemType.getDefinedPermissions();
95    if (defined != null)
96    {
97      if (defined.contains(Permission.CREATE)) sb.append(permissions.contains(Permission.CREATE) ? "C" : "-");
98      if (defined.contains(Permission.READ)) sb.append(permissions.contains(Permission.READ) ? "R" : "-");
99      if (defined.contains(Permission.USE)) sb.append(permissions.contains(Permission.USE) ? "U" : "-");
100      if (defined.contains(Permission.WRITE)) sb.append(permissions.contains(Permission.WRITE) ? "W" : "-");
101      if (defined.contains(Permission.DELETE)) sb.append(permissions.contains(Permission.DELETE) ? "D" : "-");
102      if (defined.contains(Permission.SET_OWNER)) sb.append(permissions.contains(Permission.SET_OWNER) ? "O" : "-");
103      if (defined.contains(Permission.SET_PERMISSION)) sb.append(permissions.contains(Permission.SET_PERMISSION) ? "P" : "-");
104    }
105  }
106  sb.append("]");
107  return sb.toString();
108}
109%>
110<%
111final Item itemType = Item.ROLE;
112final SessionControl sc = Base.getExistingSessionControl(pageContext, true);
113final ItemContext cc = Base.getAndSetCurrentContext(sc, itemType, null, null);
114final int itemId = cc.getId();
115final String ID = sc.getId();
116final float scale = Base.getScale(sc);
117final DbControl dc = sc.newDbControl();
118try
119{
120  String title = null;
121  Role role = null;
122  boolean isDefault = false;
123
124  if (itemId == 0)
125  {
126    title = "Create role";
127    cc.removeObject("item");
128    isDefault = Values.getBoolean(cc.getPropertyValue("default"), false);
129  }
130  else
131  {
132    role = Role.getById(dc, itemId);
133    role.checkPermission(Permission.WRITE);
134    cc.setObject("item", role);
135    isDefault = role.isDefault();
136    title = "Edit role -- " + HTML.encodeTags(role.getName());
137   
138  }
139 
140  final boolean useUsers = sc.hasPermission(Permission.WRITE, Item.USER);
141  RoleKey system = RoleKey.getById(dc, SystemItems.getRoleKeyId(Item.SYSTEM));
142  final boolean hasShareToEveryone = role == null ? false : system.getPermissions(role).contains(Permission.SHARE_TO_EVERYONE);
143  final boolean hasActAsAnotherUser = role == null ? false : system.getPermissions(role).contains(Permission.ACT_AS_ANOTHER_USER);
144  final boolean hasSelectJobagent = role == null ? false : system.getPermissions(role).contains(Permission.SELECT_JOBAGENT);
145 
146  // Query to retrieve role keys
147  final ItemQuery<RoleKey> roleKeyQuery = RoleKey.getQuery();
148  roleKeyQuery.order(Orders.asc(Hql.property("name")));
149
150  // Load user members as JSON objects
151  JSONObject jsonUsers = new JSONObject();
152  jsonUsers.put("itemType", "USER");
153  if (role != null)
154  {
155    ItemQuery<User> query = role.getUsers();
156    query.include(Include.ALL);
157    query.order(Orders.asc(Hql.property("name")));
158    jsonUsers.put("items", JsonUtil.toArray(query.iterate(dc), new NameableConverter()));
159  }
160
161  JspContext jspContext = ExtensionsControl.createContext(dc, pageContext, GuiContext.item(itemType), role);
162  ExtensionsInvoker invoker = EditUtil.useEditExtensions(jspContext);
163  %>
164  <base:page type="popup" title="<%=title%>" id="edit-page">
165  <base:head scripts="tabcontrol-2.js,linkitems-2.js,~roles.js" styles="tabcontrol.css">
166    <ext:scripts context="<%=jspContext%>" />
167    <ext:stylesheets context="<%=jspContext%>" />
168  </base:head>
169  <base:body>
170    <h1><%=title%> <base:help tabcontrol="settings" /></h1>
171   
172    <form action="index.jsp?ID=<%=ID%>" method="post" name="role">
173    <input type="hidden" name="cmd" value="UpdateItem">
174
175    <t:tabcontrol id="settings" 
176      subclass="content dialogtabcontrol"
177      position="bottom" remember="<%=role != null%>"
178      extensions="<%=invoker%>">
179    <t:tab id="info" title="Role" helpid="role.edit">
180      <table class="fullform input100">
181      <tr>
182        <th>Name</th>
183        <td><input class="text required auto-init" data-auto-init="<%=role == null ? "focus-select" : "focus" %>"
184          type="text" name="name" 
185          value="<%=HTML.encodeTags(role == null ? Values.getString(cc.getPropertyValue("name"), "New role") : role.getName())%>" 
186          maxlength="<%=Role.MAX_NAME_LENGTH%>"></td>
187        <td></td>
188      </tr>
189      <tr class="big">
190        <th>System-level<br>permissions</th>
191        <td>
192          <input type="checkbox" name="share_to_everyone" id="share_to_everyone"
193            value="<%=PermissionUtil.getPermissionCode(EnumSet.of(Permission.SHARE_TO_EVERYONE))%>" 
194            <%=hasShareToEveryone ? "checked" : ""%>
195            ><label for="share_to_everyone">Share to Everyone</label><br>
196          <input type="checkbox" name="act_as_another_user" id="act_as_another_user"
197            value="<%=PermissionUtil.getPermissionCode(EnumSet.of(Permission.ACT_AS_ANOTHER_USER))%>"
198            <%=hasActAsAnotherUser ? "checked" : ""%>
199            ><label for="act_as_another_user">Act as another user</label><br>
200          <input type="checkbox" name="select_jobagent" id="select_jobagent"
201            value="<%=PermissionUtil.getPermissionCode(EnumSet.of(Permission.SELECT_JOBAGENT))%>"
202            <%=hasSelectJobagent ? "checked" : ""%>
203            ><label for="select_jobagent">Select job agent for jobs</label><br>
204        </td>
205        <td></td>
206      </tr>
207      <tr>
208        <th>Default</th>
209        <td>
210          <input type="radio" name="is_default" id="defaultNo" value="0" 
211            <%=!isDefault ? "checked" : ""%>><label for="defaultNo">no</label>
212          <input type="radio" name="is_default" id="defaultYes" value="1" 
213            <%=isDefault ? "checked" : ""%>><label for="defaultYes">yes</label>
214        </td>
215        <td></td>
216      </tr> 
217
218      <tr class="dynamic">
219        <th>Description</th>
220        <td>
221          <textarea class="text" rows="6" name="description" id="description"
222            ><%=HTML.encodeTags(role == null ? cc.getPropertyValue("description") : role.getDescription())%></textarea>
223        </td>
224        <td style="width: 20px;">
225          <base:zoom textarea="description" title="Description" />
226        </td>
227      </tr>
228      </table>
229    </t:tab>
230   
231    <t:tab id="permissions" title="Permissions" 
232      tooltip="Set permissions for this role" helpid="role.edit.permissions">
233      <table class="fullform input100">
234      <tr class="dynamic">
235      <th>Item types</th>
236      <td>
237        <div class="selectionlist">
238        <table>
239        <tr>
240        <td>
241          <select name="items" size="15" id="items" multiple>
242          <%
243          Map<String, List<Item>> permissionGroups = PermissionUtil.getPermissionGroups();
244          for (Map.Entry<String, List<Item>> entry : permissionGroups.entrySet())
245          {
246            String name = entry.getKey();
247            List<Item> items = entry.getValue();
248            %>
249            <option class="selectoptionheader" value="">-- <%=name%>
250            <%
251            for (Item item : items)
252            {
253              %>
254              <%=getOption(dc, role, item)%>
255              <%
256            }
257          }
258          %>
259          </select>
260        </td>
261        <td style="vertical-align: top;">
262          <div style="width: 15em;">
263          <b>Permissions</b><br>
264          <input type="checkbox" name="deny" id="deny" value="<%=DENY_CODE%>"><label for="deny">Deny</label><br>
265          <input type="checkbox" name="create" id="create" value="<%=CREATE_CODE%>"><label for="create">Create</label><br>
266          <input type="checkbox" name="read" id="read" value="<%=READ_CODE%>"><label for="read">Read</label><br>
267          <input type="checkbox" name="use" id="use" value="<%=USE_CODE%>"><label for="use">Use</label><br>
268          <input type="checkbox" name="write" id="write" value="<%=WRITE_CODE%>"><label for="write">Write</label><br>
269          <input type="checkbox" name="delete" id="delete" value="<%=DELETE_CODE%>"><label for="delete">Delete</label><br>
270          <input type="checkbox" name="set_owner" id="set_owner" value="<%=SET_OWNER_CODE%>"><label for="set_owner">Set owner</label><br>
271          <input type="checkbox" name="set_permission" id="set_permission" value="<%=SET_PERMISSION_CODE%>"><label for="set_permission">Set permission</label><br>
272          </div>
273        </td>
274        </tr>
275        </table>
276        </div>
277      </td>
278      </tr>
279      </table>
280    </t:tab>
281   
282    <t:tab id="members" title="Members" tooltip="Add/remove members of this role" 
283      helpid="role.edit.members">
284      <table class="fullform input100">
285      <tr class="dynamic">
286      <th>Members</th>
287      <td>
288          <div class="selectionlist">
289          <table>
290          <tr>
291            <td>
292            <select name="members" id="members" 
293              class="auto-init" data-auto-init="link-container"
294              data-initial-items="[<%=HTML.encodeTags(jsonUsers.toJSONString()) %>]"
295              data-initial-action="<%=role == null ? 0 : 1%>"
296              size="15" multiple <%=!useUsers ? "disabled readonly class=\"disabled\"" : ""%>>
297            </select>
298          </td>
299          <td style="vertical-align: top;">
300            <base:buttongroup vertical="true">
301              <base:button 
302                id="btnAddUsers"
303                subclass="leftaligned auto-init"
304                data-auto-init="add-link"
305                data-list-id="members"
306                data-item-type="USER"
307                style="width: 12em;"
308                title="Add&nbsp;users&hellip;" 
309                tooltip="Add users to this role"
310                disabled="<%=!useUsers %>" 
311              />
312              <base:button 
313                id="btnRemoveUsers"
314                subclass="leftaligned auto-init"
315                data-auto-init="remove-link"
316                data-list-id="members"
317                style="width: 12em;"
318                title="Remove" 
319                tooltip="Remove the selected items from this role"
320                disabled="<%=!useUsers%>" 
321              />
322            </base:buttongroup>
323          </td>
324          </tr>
325          </table>
326          </div>
327      </td>
328      </tr>
329      </table>
330    </t:tab>
331    </t:tabcontrol>
332    <%
333    ItemResultList<RoleKey> roleKeys = roleKeyQuery.list(dc);
334    for (RoleKey key : roleKeys)
335    {
336      int permissionCode = role == null ? 0 : PermissionUtil.getPermissionCode(key.getPermissions(role));
337      int definedCode = key.getItemType().getDefinedPermissions() == null ? 0 : PermissionUtil.getPermissionCode(key.getItemType().getDefinedPermissions());
338      String name = key.getItemType().name();
339      %>
340      <input type="hidden" name="<%=name%>" value="<%=permissionCode%>">
341      <input type="hidden" name="<%=name%>_defined" value="<%=definedCode%>">
342      <%
343    }
344    %>
345    </form>
346   
347    <div class="legend">
348      <base:icon image="required.png" />= required information
349    </div>
350
351    <base:buttongroup subclass="dialogbuttons">
352      <base:button id="btnSave" title="Save" />
353      <base:button id="close" title="Cancel" />
354    </base:buttongroup>
355
356  </base:body>
357  </base:page>
358  <%
359}
360finally
361{
362  if (dc != null) dc.close();
363}
364%>
Note: See TracBrowser for help on using the repository browser.