/*
* Copyright 2016 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.uberfire.security.authz;
import java.util.Set;
import org.jboss.errai.security.shared.api.Group;
import org.jboss.errai.security.shared.api.Role;
import org.jboss.errai.security.shared.api.identity.User;
/**
* It holds a registry of permission collections assigned to individual Role and Group instances.
*/
public interface AuthorizationPolicy {
/**
* Get the collection of roles this policy is related to.
*/
Set<Role> getRoles();
/**
* Get the collection of groups this policy is related to.
*/
Set<Group> getGroups();
/**
* Get the description of an existing role.
* @param role The role
* @return The role description
*/
String getRoleDescription(Role role);
/**
* Sets a description for an existing role.
* @param role The role
* @param description A non empty description
*/
void setRoleDescription(Role role,
String description);
/**
* Get the description of an existing group.
* @param group The group
* @return The group description
*/
String getGroupDescription(Group group);
/**
* Sets a description for an existing group.
* @param group The group identifier
* @param description A non empty description
*/
void setGroupDescription(Group group,
String description);
/**
* Get a role's priority. The priority is important during permission resolution and when a user
* is assigned to more than one role/group it is used to determine what is the most priority.
* @param role The role instance
* @return An integer. The highest, the more priority the collection is. Default priority value is 0.
*/
int getPriority(Role role);
/**
* Get a group's priority. The priority is important during permission resolution and when a user
* is assigned to more than one role/group it is used to determine what is the most priority.
* @param group The group instance
* @return An integer. The highest, the more priority the collection is. Default priority value is 0.
*/
int getPriority(Group group);
/**
* Set the role's priority
* @param role The role instance
* @param priority Any valid integer. The highest, the more priority the role is.
*/
void setPriority(Role role,
int priority);
/**
* Set the group's priority
* @param group The group instance
* @param priority Any valid integer. The highest, the more priority the role is.
*/
void setPriority(Group group,
int priority);
/**
* Get the permissions assigned to a given role.
* @param role The role instance
* @return The permission collection
*/
PermissionCollection getPermissions(Role role);
/**
* Get the permissions assigned to a given group.
* @param group The group instance
* @return The permission collection
*/
PermissionCollection getPermissions(Group group);
/**
* Get the identifier of the home perspective assigned to the given group.
* @return An existing perspective identifier
*/
String getHomePerspective(Role role);
/**
* Get the identifier of the home perspective assigned to the given group.
* @return An existing perspective identifier
*/
String getHomePerspective(Group group);
/**
* Set the identifier of the home perspective assigned to the given role.
* @param role The target role instance
* @param perspectiveId An existing perspective identifier
*/
void setHomePerspective(Role role,
String perspectiveId);
/**
* Set the identifier of the home perspective assigned to the given group.
* @param group The target group instance
* @param perspectiveId An existing perspective identifier
*/
void setHomePerspective(Group group,
String perspectiveId);
/**
* Get the identifier of the perspective this user is redirected by default.
* <p>
* <p>If the user is assigned with more than one role or group then the most priority one
* is taken.</p>
* @return An existing perspective identifier
* @see AuthorizationPolicy#getPriority(Role)
* @see AuthorizationPolicy#getPriority(Group)
*/
String getHomePerspective(User user);
/**
* Gets the identifier of the default home perspective.
* <p>
* <p>This is the perspective that is returned for those roles/groups with no home perspective set.</p>
* @return An existing perspective identifier
*/
String getHomePerspective();
/**
* Sets the identifier of the default home perspective.
* <p>
* <p>This is the perspective that is returned for those roles/groups with no gome perspective set.</p>
* @param perspectiveId An existing perspective identifier
*/
void setHomePerspective(String perspectiveId);
/**
* Get the default permissions.
* <p>
* <p>These are he permissions that are returned for those roles/groups with no permissions set.</p>
* @return The permission collection
*/
PermissionCollection getPermissions();
}