001/* 002 * ModeShape (http://www.modeshape.org) 003 * 004 * Licensed under the Apache 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.apache.org/licenses/LICENSE-2.0 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 */ 016package org.modeshape.web.shared; 017 018import java.io.Serializable; 019import java.util.ArrayList; 020import java.util.Collection; 021import javax.jcr.security.Privilege; 022 023/** 024 * 025 * @author kulikov 026 */ 027public class Policy implements Serializable { 028 029 private JcrPermission LIFECYCLE_MANAGEMENT = new JcrPermission(Privilege.JCR_LIFECYCLE_MANAGEMENT, "Life cycle management"); 030 private JcrPermission LOCK_MANAGEMENT = new JcrPermission(Privilege.JCR_LOCK_MANAGEMENT, "Lock management"); 031 private JcrPermission NODE_TYPE_MANAGEMENT = new JcrPermission(Privilege.JCR_NODE_TYPE_MANAGEMENT, "Node type management"); 032 private JcrPermission RETENTION_MANAGEMENT = new JcrPermission(Privilege.JCR_RETENTION_MANAGEMENT, "Retention management"); 033 private JcrPermission VERSION_MANAGEMENT = new JcrPermission(Privilege.JCR_VERSION_MANAGEMENT, "Version management"); 034 035 private JcrPermission READ_ACCESS_CONTROL = new JcrPermission(Privilege.JCR_READ_ACCESS_CONTROL, "Read access control"); 036 private JcrPermission MODIFY_ACCESS_CONTROL = new JcrPermission(Privilege.JCR_MODIFY_ACCESS_CONTROL, "Modify access control"); 037 038 private JcrPermission READ = new JcrPermission(Privilege.JCR_READ, "Read"); 039 040 private JcrPermission ADD_CHILD_NODES = new JcrPermission(Privilege.JCR_ADD_CHILD_NODES, "Add child nodes"); 041 private JcrPermission REMOVE_CHILD_NODES = new JcrPermission(Privilege.JCR_REMOVE_CHILD_NODES, "Remove child nodes"); 042 private JcrPermission MODIFY_PROPERTIES = new JcrPermission(Privilege.JCR_MODIFY_PROPERTIES, "Modify properties"); 043 private JcrPermission WRITE = new JcrPermission(Privilege.JCR_WRITE, "Write", 044 ADD_CHILD_NODES, REMOVE_CHILD_NODES, MODIFY_PROPERTIES); 045 046 private JcrPermission ALL = new JcrPermission(Privilege.JCR_ALL, "All permissions", 047 LIFECYCLE_MANAGEMENT, 048 LOCK_MANAGEMENT, 049 NODE_TYPE_MANAGEMENT, 050 RETENTION_MANAGEMENT, 051 VERSION_MANAGEMENT, 052 READ_ACCESS_CONTROL, 053 MODIFY_ACCESS_CONTROL, 054 READ, WRITE); 055 056 private static final long serialVersionUID = 1L; 057 private String principal; 058 059 private JcrPermission[] PERMISSIONS = new JcrPermission[]{ 060 ALL, 061 LIFECYCLE_MANAGEMENT, 062 LOCK_MANAGEMENT, 063 NODE_TYPE_MANAGEMENT, 064 RETENTION_MANAGEMENT, 065 VERSION_MANAGEMENT, 066 READ_ACCESS_CONTROL, 067 MODIFY_ACCESS_CONTROL, 068 READ, 069 WRITE, 070 ADD_CHILD_NODES, 071 MODIFY_PROPERTIES, 072 REMOVE_CHILD_NODES 073 }; 074 075 public String getPrincipal() { 076 return principal; 077 } 078 079 public void setPrincipal(String principal) { 080 this.principal = principal; 081 } 082 083 public void enable( String name ) { 084 forName(name).setStatus(true); 085 } 086 087 public void disable( String name ) { 088 forName(name).setStatus(false); 089 } 090 091 public void disableAll() { 092 for (int i = 0; i < PERMISSIONS.length; i++) { 093 PERMISSIONS[i].setStatus(false); 094 } 095 } 096 097 public void enableAll() { 098 for (int i = 0; i < PERMISSIONS.length; i++) { 099 PERMISSIONS[i].setStatus(true); 100 } 101 } 102 103 @SuppressWarnings("unchecked") 104 public Collection<JcrPermission> permissions() { 105 ArrayList<JcrPermission> list = new ArrayList(); 106 for (int i = 0; i < PERMISSIONS.length; i++) { 107 list.add(PERMISSIONS[i]); 108 } 109 return list; 110 } 111 112 public void modify(JcrPermission permission, boolean enabled) { 113 permission.setStatus(enabled); 114 } 115 116 private JcrPermission forName(String name) { 117 for (int i = 0; i < PERMISSIONS.length; i++) { 118 if (PERMISSIONS[i].getName().equalsIgnoreCase(name)) { 119 return PERMISSIONS[i]; 120 } 121 } 122 return null; 123 } 124 125 public boolean hasPermission(JcrPermission permission) { 126 for (JcrPermission p : PERMISSIONS) { 127 if (p.matches(permission)) { 128 return true; 129 } 130 } 131 return false; 132 } 133}