Done:

http://jira.codehaus.org/browse/TYNAMO-183


On Fri, Oct 12, 2012 at 1:46 AM, Dmitry Gusev <dmitry.gu...@gmail.com>wrote:

> Using @Core annotation helped:
>
>  @Match("*")
>
> @Order("before:*")
>
> public static void adviseSecurityAssert(MethodAdviceReceiver receiver,
>
> final @Core Environment environment)
>
>
> On Fri, Oct 12, 2012 at 12:59 AM, Dmitry Gusev <dmitry.gu...@gmail.com>wrote:
>
>> Ok, I'm working on the patch now.
>>
>> I have a problem injecting Environment instance into advisor method in
>> SecurityModule:
>>
>>  @Match("*")
>>
>> @Order("before:*")
>>
>> public static void adviseSecurityAssert(MethodAdviceReceiver receiver,
>>
>> final Environment environment)
>>
>> this issue was already filed in JIRA:
>>
>> https://issues.apache.org/jira/browse/TAP5-1045
>>
>>
>> Caused by: java.lang.IllegalStateException: Construction of service
>> 'AssetObjectProvider' has failed due to recursion: the service depends on
>> itself in some way. Please check
>> org.apache.tapestry5.internal.services.AssetObjectProvider(AssetSource,
>> TypeCoercer, SymbolSource) (at AssetObjectProvider.java:45) via
>> org.apache.tapestry5.services.TapestryModule.bind(ServiceBinder) (at
>> TapestryModule.java:308) for references to another service that is itself
>> dependent on service 'AssetObjectProvider'.
>>
>> at
>> org.apache.tapestry5.ioc.internal.RecursiveServiceCreationCheckWrapper.createObject(
>> RecursiveServiceCreationCheckWrapper.java:52)
>>
>>
>>
>> On Thu, Oct 11, 2012 at 8:49 PM, Kalle Korhonen <
>> kalle.o.korho...@gmail.com> wrote:
>>
>>> Instance-level access control is a very interesting topic to me. I say
>>> you are pretty much on the right track if you want to use the
>>> permission model. You wouldn't *necessarily* need to change anything
>>> in Shiro if you just did programmatic checks with isPermitted and you
>>> knew the right permissions at the time you are creating the
>>> AuthorizationInfo. However, that model is cumbersome as you need to
>>> create all the permissions upfront and then later formulate specific
>>> ones when doing an authorization check - and you still couldn't use
>>> annotations. Alex' syntax is one way to go about and you certainly
>>> need some property substitution syntax for doing instance level checks
>>> with annotations. Using the environment for fetching the
>>> MethodInvocation sounds reasonable and I'm open to adding that as a
>>> patch to tapestry-security. That way everybody at least wouldn't need
>>> to introduce their own annotations.
>>>
>>> Entity-Relationship Based Access control is a completely different
>>> take on the same topic. It's based on the idea that the data objects
>>> you are trying to secure are in one way or another associated to the
>>> currently executing subject. It greatly simplifies the syntax required
>>> but obviously limits the possibilities as well. You wouldn't
>>> necessarily need a "DAO" but still, some single, uniformed way of
>>> accessing the data objects. The current implementation works at the
>>> (JPA) EntityManager level.
>>>
>>> Kalle
>>>
>>>
>>> On Thu, Oct 11, 2012 at 6:38 AM, Dmitry Gusev <dmitry.gu...@gmail.com>
>>> wrote:
>>> > Hi,
>>> >
>>> > I need to implement instance-level access control in my application
>>> using
>>> > tapestry-security.
>>> >
>>> > I already asked similar question here [1].
>>> >
>>> > There Taha suggested to use AuthorityVoter, but that wasn't Tynamo's
>>> > tapestry-security.
>>> >
>>> > I looked at Entity-Relationship Based Access Control [2].
>>> >
>>> > This is not exactly what I need, because I don't even have DAO layer
>>> > involved here.
>>> >
>>> > Here's what I have. I have business method in one of my services:
>>> >
>>> >     @RequiresPermissions("task:submit")
>>> >
>>> >     void submitTask(Task newTask);
>>> >
>>> > I read about ILAC on Shiro's web site [2].
>>> >
>>> > This looks similar, but in my domain not every user may submit every
>>> task
>>> > for execution.
>>> > I have custom logic that should inspect instance of the newTask and
>>> decide
>>> > whether current user has permissions to submit the task for execution
>>> or
>>> > not.
>>> >
>>> > In Shiro's documentation [3] there's a note that tells that a
>>> developer may
>>> > write its own implementation of AuthorizingRealm.isPermitted(*) to
>>> check
>>> > permissions against custom domain model. I'm not sure about this in my
>>> > case, though, because this note is given in 'Performance
>>> Considerations'
>>> > section.
>>> >
>>> > One more thing that stops me from overriding
>>> AuthorizingRealm.isPermitted(*) is
>>> > I don't have access to invocation context, i.e. I can't get instance
>>> of the
>>> > newTask from example above:
>>> >
>>> >         AuthorizingRealm realm = new AuthorizingRealm()
>>> >
>>> >         {
>>> >
>>> >             @Override
>>> >
>>> >             public boolean isPermitted(PrincipalCollection principals,
>>> > Permission permission) {
>>> >
>>> >                 //  XXX ... can't access to newTask instance
>>> >
>>> >             }
>>> >
>>> >
>>> > I was thinking about fixing Tynamo's SecurityInterceptor advise, by
>>> putting
>>> > MethodInvocation into Tapestry Environment service instance and getting
>>> > this MethodInvocation from there in realm.
>>> >
>>> > Am I in the right direction? Any suggestions?
>>> >
>>> >
>>> >
>>> > [1]
>>> >
>>> http://tapestry.1045711.n5.nabble.com/ANN-A-Tapestry5-Based-Security-Module-tp3322452p3338137.html
>>> > [2] http://tynamo.org/tapestry-security-jpa+guide
>>> > [3]
>>> >
>>> http://shiro.apache.org/permissions.html#Permissions-InstanceLevelAccessControl
>>> > [4]
>>> >
>>> http://shiro.apache.org/permissions.html#Permissions-PerformanceConsiderations
>>> >
>>> > --
>>> > Dmitry Gusev
>>> >
>>> > AnjLab Team
>>> > http://anjlab.com
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscr...@tapestry.apache.org
>>> For additional commands, e-mail: users-h...@tapestry.apache.org
>>>
>>>
>>
>>
>> --
>> Dmitry Gusev
>>
>> AnjLab Team
>> http://anjlab.com
>>
>
>
>
> --
> Dmitry Gusev
>
> AnjLab Team
> http://anjlab.com
>



-- 
Dmitry Gusev

AnjLab Team
http://anjlab.com

Reply via email to