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.Arrays; 021import javax.jcr.security.Privilege; 022 023/** 024 * Permission object. 025 * 026 * @author kulikov 027 */ 028public class JcrPermission implements Serializable { 029 private static final long serialVersionUID = 1L; 030 private String name; 031 private String displayName; 032 private String jcrName; 033 private boolean status; 034 035 private ArrayList<JcrPermission> aggregates = new ArrayList<JcrPermission>(); 036 037 public static final JcrPermission LIFECYCLE_MANAGEMENT = new JcrPermission(Privilege.JCR_LIFECYCLE_MANAGEMENT, "Life cycle management"); 038 public static final JcrPermission LOCK_MANAGEMENT = new JcrPermission(Privilege.JCR_LOCK_MANAGEMENT, "Lock management"); 039 public static final JcrPermission NODE_TYPE_MANAGEMENT = new JcrPermission(Privilege.JCR_NODE_TYPE_MANAGEMENT, "Node type management"); 040 public static final JcrPermission RETENTION_MANAGEMENT = new JcrPermission(Privilege.JCR_RETENTION_MANAGEMENT, "Retention management"); 041 public static final JcrPermission VERSION_MANAGEMENT = new JcrPermission(Privilege.JCR_VERSION_MANAGEMENT, "Version management"); 042 043 public static final JcrPermission READ_ACCESS_CONTROL = new JcrPermission(Privilege.JCR_READ_ACCESS_CONTROL, "Read access control"); 044 public static final JcrPermission MODIFY_ACCESS_CONTROL = new JcrPermission(Privilege.JCR_MODIFY_ACCESS_CONTROL, "Modify access control"); 045 046 public static final JcrPermission READ = new JcrPermission(Privilege.JCR_READ, "Read"); 047 048 public static final JcrPermission ADD_CHILD_NODES = new JcrPermission(Privilege.JCR_ADD_CHILD_NODES, "Add child nodes"); 049 public static final JcrPermission REMOVE_CHILD_NODES = new JcrPermission(Privilege.JCR_REMOVE_CHILD_NODES, "Remove child nodes"); 050 public static final JcrPermission MODIFY_PROPERTIES = new JcrPermission(Privilege.JCR_MODIFY_PROPERTIES, "Modify properties"); 051 public static final JcrPermission WRITE = new JcrPermission(Privilege.JCR_WRITE, "Write", 052 ADD_CHILD_NODES, REMOVE_CHILD_NODES, MODIFY_PROPERTIES); 053 054 public static final JcrPermission ALL = new JcrPermission(Privilege.JCR_ALL, "All permissions", 055 LIFECYCLE_MANAGEMENT, 056 LOCK_MANAGEMENT, 057 NODE_TYPE_MANAGEMENT, 058 RETENTION_MANAGEMENT, 059 VERSION_MANAGEMENT, 060 READ_ACCESS_CONTROL, 061 MODIFY_ACCESS_CONTROL, 062 READ, WRITE); 063 064 065 private static JcrPermission[] PERMISSIONS = new JcrPermission[]{ 066 JcrPermission.ALL, 067 JcrPermission.LIFECYCLE_MANAGEMENT, 068 JcrPermission.LOCK_MANAGEMENT, 069 JcrPermission.NODE_TYPE_MANAGEMENT, 070 JcrPermission.RETENTION_MANAGEMENT, 071 JcrPermission.VERSION_MANAGEMENT, 072 JcrPermission.READ_ACCESS_CONTROL, 073 JcrPermission.MODIFY_ACCESS_CONTROL, 074 JcrPermission.READ, 075 JcrPermission.WRITE, 076 JcrPermission.ADD_CHILD_NODES, 077 JcrPermission.MODIFY_PROPERTIES, 078 JcrPermission.REMOVE_CHILD_NODES 079 }; 080 081 public static JcrPermission fromDisplayName(String name) { 082 for (int i = 0; i < PERMISSIONS.length; i++) { 083 if (PERMISSIONS[i].getDisplayName().equals(name)) { 084 return PERMISSIONS[i]; 085 } 086 } 087 return null; 088 } 089 090 public static JcrPermission forName(String name) { 091 for (int i = 0; i < PERMISSIONS.length; i++) { 092 if (PERMISSIONS[i].getName().equalsIgnoreCase(name)) { 093 return PERMISSIONS[i]; 094 } 095 } 096 return null; 097 } 098 099 public JcrPermission() { 100 } 101 102 protected JcrPermission(String name) { 103 if (name.startsWith("{")) { 104 this.name = "jcr:" + name.substring(name.indexOf("}") + 1); 105 this.jcrName = name; 106 } else { 107 this.name = name; 108 } 109 } 110 111 protected JcrPermission(String name, String displayName) { 112 this(name); 113 this.displayName = displayName; 114 } 115 116 protected JcrPermission(String name, String displayName, JcrPermission... aggregates) { 117 this(name); 118 this.displayName = displayName; 119 this.aggregates.addAll(Arrays.asList(aggregates)); 120 } 121 122 public String getName() { 123 return name; 124 } 125 126 public void setName(String name) { 127 this.name = name; 128 } 129 130 public String getDisplayName() { 131 return displayName; 132 } 133 134 public void setDisplayName(String displayName) { 135 this.displayName = displayName; 136 } 137 138 public String getJcrName() { 139 return jcrName; 140 } 141 142 public boolean getStatus() { 143 return status; 144 } 145 146 public void setStatus(boolean status) { 147 this.status = status; 148 } 149 150 public boolean matches(JcrPermission permission) { 151 if (this.name.equalsIgnoreCase(permission.name)) { 152 return true; 153 } 154 155 for (JcrPermission p : aggregates) { 156 if (p.matches(permission)) { 157 return true; 158 } 159 } 160 161 return false; 162 } 163}