001 package org.apache.turbine.services.security.torque; 002 003 /* 004 * Licensed to the Apache Software Foundation (ASF) under one 005 * or more contributor license agreements. See the NOTICE file 006 * distributed with this work for additional information 007 * regarding copyright ownership. The ASF licenses this file 008 * to you under the Apache License, Version 2.0 (the 009 * "License"); you may not use this file except in compliance 010 * with the License. You may obtain a copy of the License at 011 * 012 * http://www.apache.org/licenses/LICENSE-2.0 013 * 014 * Unless required by applicable law or agreed to in writing, 015 * software distributed under the License is distributed on an 016 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 017 * KIND, either express or implied. See the License for the 018 * specific language governing permissions and limitations 019 * under the License. 020 */ 021 022 import java.util.Iterator; 023 024 import org.apache.torque.om.Persistent; 025 026 import org.apache.turbine.om.security.Group; 027 import org.apache.turbine.om.security.Role; 028 import org.apache.turbine.om.security.User; 029 import org.apache.turbine.services.security.TurbineSecurity; 030 import org.apache.turbine.util.security.RoleSet; 031 import org.apache.turbine.util.security.TurbineSecurityException; 032 033 /** 034 * This class represents a Group of Users in the system that are associated 035 * with specific entity or resource. The users belonging to the Group may 036 * have various Roles. The Permissions to perform actions upon the resource 037 * depend on the Roles in the Group that they are assigned. It is separated 038 * from the actual Torque peer object to be able to replace the Peer with an 039 * user supplied Peer (and Object) 040 * 041 * <a name="global"> 042 * <p> Certain Roles that the Users may have in the system are not related 043 * to any specific resource nor entity. 044 * They are assigned within a special group named 'global' that can be 045 * referenced in the code as {@link #GLOBAL_GROUP_NAME}. 046 * <br> 047 * 048 * @author <a href="mailto:Rafal.Krzewski@e-point.pl">Rafal Krzewski</a> 049 * @author <a href="mailto:mpoeschl@marmot.at">Martin Poeschl</a> 050 * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a> 051 * @version $Id: TorqueGroup.java 1096130 2011-04-23 10:37:19Z ludwig $ 052 */ 053 054 public class TorqueGroup 055 extends TorqueObject 056 implements Group, 057 Comparable 058 { 059 060 /** Serial Version UID */ 061 private static final long serialVersionUID = -2034684697021752888L; 062 063 /** 064 * Constructs a new Group. 065 */ 066 public TorqueGroup() 067 { 068 super(); 069 } 070 071 /** 072 * Constructs a new Group with the specified name. 073 * 074 * @param name The name of the new object. 075 */ 076 077 public TorqueGroup(String name) 078 { 079 super(name); 080 } 081 082 /** 083 * The package private Constructor is used when the GroupPeerManager 084 * has retrieved a list of Database Objects from the peer and 085 * must 'wrap' them into TorqueGroup Objects. 086 * You should not use it directly! 087 * 088 * @param obj An Object from the peer 089 */ 090 public TorqueGroup(Persistent obj) 091 { 092 super(obj); 093 } 094 095 /** 096 * Returns the underlying Object for the Peer 097 * 098 * Used in the GroupPeerManager when building a new Criteria. 099 * 100 * @return The underlying persistent object 101 * 102 */ 103 104 public Persistent getPersistentObj() 105 { 106 if (obj == null) 107 { 108 obj = GroupPeerManager.newPersistentInstance(); 109 } 110 return obj; 111 } 112 113 /** 114 * Returns the name of this object. 115 * 116 * @return The name of the object. 117 */ 118 public String getName() 119 { 120 return GroupPeerManager.getGroupName(getPersistentObj()); 121 } 122 123 /** 124 * Sets the name of this object. 125 * 126 * @param name The name of the object. 127 */ 128 public void setName(String name) 129 { 130 GroupPeerManager.setGroupName(getPersistentObj(), name); 131 } 132 133 /** 134 * Gets the Id of this object 135 * 136 * @return The Id of the object 137 */ 138 public int getId() 139 { 140 return GroupPeerManager.getIdAsObj(getPersistentObj()).intValue(); 141 } 142 143 /** 144 * Gets the Id of this object 145 * 146 * @return The Id of the object 147 */ 148 public Integer getIdAsObj() 149 { 150 return GroupPeerManager.getIdAsObj(getPersistentObj()); 151 } 152 153 /** 154 * Sets the Id of this object 155 * 156 * @param id The new Id 157 */ 158 public void setId(int id) 159 { 160 GroupPeerManager.setId(getPersistentObj(), id); 161 } 162 163 /** 164 * Provides a reference to the Group object that represents the 165 * <a href="#global">global group</a>. 166 * 167 * @return a Group object that represents the global group. 168 * @deprecated Please use the method in TurbineSecurity now. 169 */ 170 public static Group getGlobalGroup() 171 { 172 return TurbineSecurity.getGlobalGroup(); 173 } 174 175 /** 176 * Creates a new Group in the system. 177 * 178 * @param name The name of the new Group. 179 * @return An object representing the new Group. 180 * @throws TurbineSecurityException if the Group could not be created. 181 * @deprecated Please use the createGroup method in TurbineSecurity now. 182 */ 183 public static Group create(String name) 184 throws TurbineSecurityException 185 { 186 return TurbineSecurity.createGroup(name); 187 } 188 189 // These following methods are wrappers around TurbineSecurity 190 191 /** 192 * Makes changes made to the Group attributes permanent. 193 * 194 * @throws TurbineSecurityException if there is a problem while 195 * saving data. 196 */ 197 public void save() 198 throws TurbineSecurityException 199 { 200 TurbineSecurity.saveGroup(this); 201 } 202 203 /** 204 * Removes a group from the system. 205 * 206 * @throws TurbineSecurityException if the Group could not be removed. 207 */ 208 public void remove() 209 throws TurbineSecurityException 210 { 211 TurbineSecurity.removeGroup(this); 212 } 213 214 /** 215 * Renames the role. 216 * 217 * @param name The new Group name. 218 * @throws TurbineSecurityException if the Group could not be renamed. 219 */ 220 public void rename(String name) 221 throws TurbineSecurityException 222 { 223 TurbineSecurity.renameGroup(this, name); 224 } 225 226 /** 227 * Grants a Role in this Group to an User. 228 * 229 * @param user An User. 230 * @param role A Role. 231 * @throws TurbineSecurityException if there is a problem while assigning 232 * the Role. 233 */ 234 public void grant(User user, Role role) 235 throws TurbineSecurityException 236 { 237 TurbineSecurity.grant(user, this, role); 238 } 239 240 /** 241 * Grants Roles in this Group to an User. 242 * 243 * @param user An User. 244 * @param roleSet A RoleSet. 245 * @throws TurbineSecurityException if there is a problem while assigning 246 * the Roles. 247 */ 248 public void grant(User user, RoleSet roleSet) 249 throws TurbineSecurityException 250 { 251 Iterator roles = roleSet.iterator(); 252 while (roles.hasNext()) 253 { 254 TurbineSecurity.grant(user, this, (Role) roles.next()); 255 } 256 } 257 258 /** 259 * Revokes a Role in this Group from an User. 260 * 261 * @param user An User. 262 * @param role A Role. 263 * @throws TurbineSecurityException if there is a problem while unassigning 264 * the Role. 265 */ 266 public void revoke(User user, Role role) 267 throws TurbineSecurityException 268 { 269 TurbineSecurity.revoke(user, this, role); 270 } 271 272 /** 273 * Revokes Roles in this group from an User. 274 * 275 * @param user An User. 276 * @param roleSet a RoleSet. 277 * @throws TurbineSecurityException if there is a problem while unassigning 278 * the Roles. 279 */ 280 public void revoke(User user, RoleSet roleSet) 281 throws TurbineSecurityException 282 { 283 Iterator roles = roleSet.iterator(); 284 while (roles.hasNext()) 285 { 286 TurbineSecurity.revoke(user, this, (Role) roles.next()); 287 } 288 } 289 290 } 291