001package org.apache.fulcrum.security.model.turbine;
002
003
004/*
005 * Licensed to the Apache Software Foundation (ASF) under one
006 * or more contributor license agreements.  See the NOTICE file
007 * distributed with this work for additional information
008 * regarding copyright ownership.  The ASF licenses this file
009 * to you under the Apache License, Version 2.0 (the
010 * "License"); you may not use this file except in compliance
011 * with the License.  You may obtain a copy of the License at
012 *
013 *   http://www.apache.org/licenses/LICENSE-2.0
014 *
015 * Unless required by applicable law or agreed to in writing,
016 * software distributed under the License is distributed on an
017 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
018 * KIND, either express or implied.  See the License for the
019 * specific language governing permissions and limitations
020 * under the License.
021 */
022
023
024import java.io.Serializable;
025
026import org.apache.fulcrum.security.acl.AccessControlList;
027import org.apache.fulcrum.security.entity.Group;
028import org.apache.fulcrum.security.entity.Permission;
029import org.apache.fulcrum.security.entity.Role;
030import org.apache.fulcrum.security.util.GroupSet;
031import org.apache.fulcrum.security.util.PermissionSet;
032import org.apache.fulcrum.security.util.RoleSet;
033
034/**
035 * This interface describes a control class that makes it
036 * easy to find out if a particular User has a given Permission.
037 * It also determines if a User has a a particular Role.
038 *
039 * @author <a href="mailto:john.mcnally@clearink.com">John D. McNally</a>
040 * @author <a href="mailto:bmclaugh@algx.net">Brett McLaughlin</a>
041 * @author <a href="mailto:greg@shwoop.com">Greg Ritter</a>
042 * @author <a href="mailto:Rafal.Krzewski@e-point.pl">Rafal Krzewski</a>
043 * @author <a href="mailto:marco@intermeta.de">Marco Kn&uuml;ttel</a>
044 * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
045 * @version $Id: AccessControlList.java 615328 2008-01-25 20:25:05Z tv $
046 */
047public interface TurbineAccessControlList<T extends TurbineAccessControlList<T>> extends Serializable, AccessControlList 
048{
049    /**
050     * Retrieves a set of Roles an user is assigned in a Group.
051     *
052     * @param group the Group
053     * @return the set of Roles this user has within the Group.
054     */
055    RoleSet getRoles(Group group);
056
057    /**
058     * Retrieves a set of Roles an user is assigned in the global Group.
059     *
060     * @return the set of Roles this user has within the global Group or null.
061     */
062    RoleSet getRoles();
063
064    /**
065     * Retrieves a set of Permissions an user is assigned in a Group.
066     *
067     * @param group the Group
068     * @return the set of Permissions this user has within the Group.
069     */
070    PermissionSet getPermissions(Group group);
071
072    /**
073     * Retrieves a set of Permissions an user is assigned in the global Group.
074     *
075     * @return the set of Permissions this user has within the global Group.
076     */
077    PermissionSet getPermissions();
078
079    /**
080     * Checks if the user is assigned a specific Role in the Group.
081     *
082     * @param role the Role
083     * @param group the Group
084     * @return <code>true</code> if the user is assigned the Role in the Group.
085     */
086    boolean hasRole(Role role, Group group);
087
088    /**
089     * Checks if the user is assigned a specific Role in any of the given
090     * Groups
091     *
092     * @param role the Role
093     * @param groupset a Groupset
094     * @return <code>true</code> if the user is assigned the Role in any of
095     *         the given Groups.
096     */
097    boolean hasRole(Role role, GroupSet groupset);
098
099    /**
100     * Checks if the user is assigned a specific Role in the Group.
101     *
102     * @param role the Role
103     * @param group the Group
104     * @return <code>true</code> if the user is assigned the Role in the Group.
105     */
106    boolean hasRole(String role, String group);
107
108    /**
109     * Checks if the user is assigned a specifie Role in any of the given
110     * Groups
111     *
112     * @param rolename the name of the Role
113     * @param groupset a Groupset
114     * @return <code>true</code> if the user is assigned the Role in any of
115     *         the given Groups.
116     */
117    boolean hasRole(String rolename, GroupSet groupset);
118
119    /**
120     * Checks if the user is assigned a specific Role in the global Group.
121     *
122     * @param role the Role
123     * @return <code>true</code> if the user is assigned the Role in the global Group.
124     */
125    boolean hasRole(Role role);
126
127    /**
128     * Checks if the user is assigned a specific Role in the global Group.
129     *
130     * @param role the Role
131     * @return <code>true</code> if the user is assigned the Role in the global Group.
132     */
133    boolean hasRole(String role);
134
135    /**
136     * Checks if the user is assigned a specific Permission in the Group.
137     *
138     * @param permission the Permission
139     * @param group the Group
140     * @return <code>true</code> if the user is assigned the Permission in the Group.
141     */
142    boolean hasPermission(Permission permission, Group group);
143
144    /**
145     * Checks if the user is assigned a specific Permission in any of the given
146     * Groups
147     *
148     * @param permission the Permission
149     * @param groupset a Groupset
150     * @return <code>true</code> if the user is assigned the Permission in any
151     *         of the given Groups.
152     */
153    boolean hasPermission(Permission permission, GroupSet groupset);
154
155    /**
156     * Checks if the user is assigned a specific Permission in the Group.
157     *
158     * @param permission the Permission
159     * @param group the Group
160     * @return <code>true</code> if the user is assigned the Permission in the Group.
161     */
162    boolean hasPermission(String permission, String group);
163
164    /**
165     * Checks if the user is assigned a specific Permission in the Group.
166     *
167     * @param permission the Permission
168     * @param group the Group
169     * @return <code>true</code> if the user is assigned the Permission in the Group.
170     */
171    boolean hasPermission(String permission, Group group);
172
173    /**
174     * Checks if the user is assigned a specifie Permission in any of the given
175     * Groups
176     *
177     * @param permissionName the name of the Permission
178     * @param groupset a Groupset
179     * @return <code>true</code> if the user is assigned the Permission in any
180     *         of the given Groups.
181     */
182    boolean hasPermission(String permissionName, GroupSet groupset);
183
184    /**
185     * Checks if the user is assigned a specific Permission in the global Group.
186     *
187     * @param permission the Permission
188     * @return <code>true</code> if the user is assigned the Permission in the global Group.
189     */
190    boolean hasPermission(Permission permission);
191
192    /**
193     * Checks if the user is assigned a specific Permission in the global Group.
194     *
195     * @param permission the Permission
196     * @return <code>true</code> if the user is assigned the Permission in the global Group.
197     */
198    boolean hasPermission(String permission);
199
200    /**
201     * Returns all groups defined in the system.
202     *
203     * @return An Array of all defined Groups
204     *
205     * This is useful for debugging, when you want to display all roles
206     * and permissions an user is assigned. This method is needed
207     * because you can't call static methods of TurbineSecurity class
208     * from within WebMacro/Velocity template
209     */
210    Group[] getAllGroups();
211
212    /**
213     * Retrieves a set of Groups an user is assigned to.
214     *
215     * @return the set of Groups this user is assigned to.
216     */
217    GroupSet getGroupSet();
218}