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

Maria Jurcovicova commented on SHIRO-314:
-----------------------------------------

I started with a grammar and would like to get some feedback on it. Demo 
proof-of-concept parser is in the GrammarDemoProofOfConcept.rar attachment.

The grammar has four operators:
*  and &&
*  or  ||
*  not  !
*  parenthesis ( )

and two build-in functions:
* role,
* permission.

Example:
  @Secured("permission('account:1 0:test') && (permission('print paper') || 
!role('role'))")

--------------- Escaping: 
Theoretically, the symbol ' might be used in role or permission name. To escape 
it, use /.
Example:
  @Secured("permission('some role with /' symbol')") 
  @Secured("role('some role with // symbol')") 
 
The symbol \ is more standard, but that one has to be escaped in java. E.g. the 
user would have to write 
  role('name with \\' in it')) instead of role('name with /' in it')) to get 
"name with ' in it"
  role('name with \\\\ in it')) instead of role('name with // in it')) to get 
"name with \ in it" or "name with / in it"

--------------- Shortcut 1: 
As expressions might get too long, both role and permission functions takes n 
parameters:
* role(role_1, role_2,  ..., role_n),
* permission(permission_1, permission_2, ..., permission_n).

Role function returns true if currently logged user has all specified roles. 
Permission function returns true if currently logged user has all specified 
permissions.

Example:
  @Secured("role('traveling sales', 'employee')") 
  is equivalent to 
  @Secured("role('traveling sales') && role('employee')") 
  
  @Secured("permission('account:1', 'print')") 
  is equivalent to 
  @Secured("permission('account:1') && permission('print')") 

--------------- Shortcut 2: 
I assume that roles are used more often. If neither role nor permission 
function is specified, role is assumed.

Example:
  @Secured("'traveling sales' && 'employee' || 'some role')") 
  is equivalent to 
  @Secured("role('traveling sales') && role('employee') || role('some role')") 


> Authorization ANTLR Grammar
> ---------------------------
>
>                 Key: SHIRO-314
>                 URL: https://issues.apache.org/jira/browse/SHIRO-314
>             Project: Shiro
>          Issue Type: New Feature
>          Components: Authorization (access control) 
>            Reporter: Maria Jurcovicova
>         Attachments: GrammarDemoProofOfConcept.rar
>
>
> Create a single annotation that would translate the expression into the 
> relevant hasRole/isPermitted calls. 
> Details are on wiki 
> https://cwiki.apache.org/confluence/display/SHIRO/Version+2+Brainstorming#Version2Brainstorming-AuthorizationANTLRGrammar
>  . 

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to