Why would you need to force another permission check?

-Adrian

On 11/23/2011 8:54 PM, Nicolas Malin wrote:
Hi adrian,

If a explain in my words, (if I really understand you solution) :
On your first service, you declare permissions and force the inherit authorization on sub services called.

On many case, your solution works fine, but for some service, I will keep the possibility to force permission analyze. Exclude this last point, I agree with you.

Nicolas

Le 23/11/2011 09:14, Adrian Crum a écrit :
I am running into that familiar problem of handling authorization in nested services. Example:

Application A
  Invoke Service "A"
    Authorized with permissions "A"
    Invokes Service "C" in Application "C"
      Authorized with permissions "C"

In order for a user to run Service "A", I have to give them permission to run Service "A" and Service "C". This might not be desirable because granting permission "C" to the user could give them access to other things I didn't intend to give them access to.

So far, we have handled that permission issue with permission service SECAs - where a second permission service is invoked if the first one fails. SECA Example:

Invoke permission service for permissions "C"
If permission service fails, invoke permission service for permissions "A"
    Return results of permission service "A"
  Else
    Return results of permission service "C"

This solves the problem (an example can be found in the Asset Maint application), but it is cumbersome to implement.

There are other places in the project where the problem is solved by invoking Service "C" with "system" or "admin" user credentials - which looks hackish to me.

It seems to me this could be made a lot simpler by having the service dispatcher keep track of previous authorizations. In other words, move the authorization tracking (which is currently handled outside the service dispatcher) into the service dispatcher. Example:

Service invoked
  If user previously authorized
    Execute service
  Else
    Execute permission service
    If user authorized
      Set previously authorized to true
      Execute service
      Set previously authorized to false

With this change, giving the user permission to run Service "A" will automatically authorize them to run any services called by the service.

Naturally, this approach does not solve the problem if permission checks are embedded in service code - it depends on the use of permission services.

So, what do you think?

-Adrian



Reply via email to