[ 
https://issues.apache.org/jira/browse/DELTASPIKE-64?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13196852#comment-13196852
 ] 

Shane Bryzak commented on DELTASPIKE-64:
----------------------------------------

In Seam Security we have a system of typesafe security annotations.  
Essentially, it's up to the developer to create the annotations required for 
the authorization checks in their application.  The security binding 
annotations are annotated with @SecurityBindingType, here's an example:

@SecurityBindingType
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface Admin {
}

The annotation may declare member variables also which are taken into account 
for the authorization check, unless the member is annotated @Nonbinding.

Authorizer methods are used to determine whether a user has sufficient 
privileges to invoke a secured method.  The @Secures annotation is used in 
combination with the security binding type annotation to declare the authorizer 
method, eg:

    public @Secures @Admin boolean isAdmin(Identity identity) {
        return identity.hasRole("admin", "USERS", "GROUP");
    }

This allows combinations of security binding types to be declared on a single 
method or class, and also has the advantage of allowing the user to declare all 
of their security "business logic" in a single bean.  Once the security binding 
type annotation and the authorizer method is declared, it is then a simple 
matter of applying the annotation:

    @Admin
    public void doSomethingRestricted() {
        messages.info("doSomethingRestricted() invoked");
    }
                
> review and discuss @Secured
> ---------------------------
>
>                 Key: DELTASPIKE-64
>                 URL: https://issues.apache.org/jira/browse/DELTASPIKE-64
>             Project: DeltaSpike
>          Issue Type: Sub-task
>          Components: Security-Module
>    Affects Versions: 0.1
>            Reporter: Gerhard Petracek
>            Assignee: Gerhard Petracek
>             Fix For: 0.2
>
>
> this feature is listed at 
> https://cwiki.apache.org/confluence/display/DeltaSpike/SE+Feature+Ranking and 
> part of myfaces codi-core.
> @Secured is a simple cdi interceptor annotation which allows to filter method 
> calls to cdi beans based on custom rules.
> it's possible to specify 1-n custom implementations of AccessDecisionVoter. 
> those voters get invoked before the call is forwarded to the target method (a 
> voter is a cdi bean which gets resolved by its concrete type). an 
> implementation of AccessDecisionVoter can access the InvocationContext to get 
> further details about the target method to trigger the corresponding 
> evaluation. as a result voters return a set of violations 
> (SecurityViolation). if there is no violation, the target-method gets 
> executed. if there is at least one violation, an AccessDeniedException will 
> be thrown.
> in addition an AccessDecisionVoterContext is needed to detect if there is an 
> ongoing security check (e.g. it's possible to use it in a custom scope to 
> avoid that a security check postpones the expiration).
> (in myfaces codi it's also used to secure views via view-configs, however, we 
> will exclude this part for now.)
> users can use those simple and generic apis to implement their own access 
> control and it will get used by other deltaspike modules automatically (if 
> they use the security-api).
> (in an AccessDecisionVoter it's possible to integrate 3rd party 
> security-frameworks.)
> usage of @Secured:
> //...
> @Secured({MyAccessDecisionVoter1.class, MyAccessDecisionVoter2.class})
> public class SecuredBean
> {
>     //...
> }

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to