Copyright (c) 2019 Stephane Bastian
This program and the accompanying materials are made available under the 2
terms of the Eclipse Public License 2.0 which is available at
http://www.eclipse.org/legal/epl-2.0.
SPDX-License-Identifier: EPL-2.0 3
Contributors: 4
Stephane Bastian - initial API and implementation
/********************************************************************************
* Copyright (c) 2019 Stephane Bastian
*
* This program and the accompanying materials are made available under the 2
* terms of the Eclipse Public License 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0.
*
* SPDX-License-Identifier: EPL-2.0 3
*
* Contributors: 4
* Stephane Bastian - initial API and implementation
********************************************************************************/
package io.vertx.ext.auth.authorization;
import io.vertx.codegen.annotations.GenIgnore;
import io.vertx.codegen.annotations.VertxGen;
import io.vertx.ext.auth.User;
import static io.vertx.codegen.annotations.GenIgnore.PERMITTED_TYPE;
Interface representing any kind of authorization such as:
- Role based authorization
- Permission based authorization
- Logical authorization (AND, OR, NOT)
- Time based authorization (ie: allow access the last 5 days of the month, from 8am till 10am, etc.)
- Context based authorization (ie: allow access if the ip address is 'xxx.xxx.xxx.xxx')
- Custom based authorization (ie: based on a script or hard-coded code specific to an application)
- etc.
The following implementations are provided out of the box:
Author: Stephane Bastian
/**
* Interface representing any kind of authorization such as:
* <ul>
* <li>Role based authorization
* <li>Permission based authorization
* <li>Logical authorization (AND, OR, NOT)
* <li>Time based authorization (ie: allow access the last 5 days of the month, from 8am till 10am, etc.)
* <li>Context based authorization (ie: allow access if the ip address is 'xxx.xxx.xxx.xxx')
* <li>Custom based authorization (ie: based on a script or hard-coded code specific to an application)
* <li>etc.
* </ul>
* The following implementations are provided out of the box:
* <ul>
* <li>{@link AndAuthorization}
* <li>{@link NotAuthorization}
* <li>{@link OrAuthorization}
* <li>{@link PermissionBasedAuthorization}
* <li>{@link RoleBasedAuthorization}
* <li>{@link WildcardPermissionBasedAuthorization}
* </ul>
*
* @author <a href="mail://stephane.bastian.dev@gmail.com">Stephane Bastian</a>
*
*/
@VertxGen
public interface Authorization {
this methods verifies whether or not the authorization match the specified
context.
Params: - context – the context.
Returns: true if there's a match.
/**
* this methods verifies whether or not the authorization match the specified
* context.
*
* @param context the context.
* @return true if there's a match.
*/
boolean match(AuthorizationContext context);
this methods verifies whether or not the authorization match the specified user. Internally a basic context is created with the user and the method delegates to match(AuthorizationContext)
Params: - user – the user.
Returns: true if there's a match
/**
* this methods verifies whether or not the authorization match the specified
* user. Internally a basic context is created with the user and the method
* delegates to {@link #match(AuthorizationContext)}
*
* @param user the user.
* @return true if there's a match
*/
@GenIgnore(PERMITTED_TYPE)
default boolean match(User user) {
return match(AuthorizationContext.create(user));
}
this method verifies whether or not the authorization implies the specified
authorization.
Note that it doesn't always mean an exact match. For instance, in the case of a WildcardPermissionBasedAuthorization
, this method may return true even if the permissions are different
WildcardPermissionBasedAuthorization.create('*').verify(WildcardPermissionBasedAuthorization.create('anypermission'))
would return true
Params: - authorization – the authorization.
Returns: true if implies the argument.
/**
* this method verifies whether or not the authorization implies the specified
* authorization.
* </br>Note that it doesn't always mean an exact match. For instance,
* in the case of a {@link WildcardPermissionBasedAuthorization}, this method
* may return true even if the permissions are different
* </br>WildcardPermissionBasedAuthorization.create('*').verify(WildcardPermissionBasedAuthorization.create('anypermission'))
* would return true
*
* @param authorization the authorization.
* @return true if implies the argument.
*/
boolean verify(Authorization authorization);
}