PHP MySQL Zend-ACL - Find all inherited items (Children / Parents)

Posted by Scoobler on Stack Overflow See other posts from Stack Overflow or by Scoobler
Published on 2010-12-22T17:01:46Z Indexed on 2010/12/23 11:54 UTC
Read the original article Hit count: 191

Filed under:
|
|
|

I have one MySQL DB table like the following, the resources table:

id | name | type

1 | guest | user

2 | member | user

3 | moderator | user

4 | owner | user

5 | admin | user

6 | index | controller


Onto the next table, the rules table:

id | user_id | rule | resource_id | extras

1 | 2 | 3 | 1 | null

2 | 3 | 3 | 2 | null

3 | 4 | 3 | 3 | null

4 | 5 | 3 | 4 | null

5 | 6 | 1 | 1 | index,login,register

6 | 6 | 2 | 2 | login,register

7 | 6 | 1 | 2 | logout


OK, sorry for the length, but I am trying to give a full picture of what I am trying to do. So the way it works, a role (aka user) can be granted (rule: 1) access to a controller, a role can inherit (rule: 3) access from another role or a role and be denied (rule: 2) access to a controller. (A user is a resource and a controller is a resource)

Access to actions are granted / denied using the extras column.

This all works, its not a problem with setting up the ACL within zend.


What I am now trying to do is show the relationships; to do that I need to find the lowest level a role is granted access to a controller stopping if it has explicitly been removed. I plan on listing the roles. When I click a role, I want it to show all the controllers that role has access to. Then clicking on a controller shows the actions the role is allowed to do.

So in the example above, a guest is allowed to view the index action of the index controller along with the login action. A member inherits the same access, but is then denied access to the login action and register action. A moderator inherits the rules of a member.

So if I were to select the role moderator. I want to see the controller index listed. If I click on the controller, it should show the allowed actions as being action: index. (which was originally granted to the guest, but hasn't since been dissallowed)

Is there any examples to doing this. I am obviously working with the Zend MVC (PHP) and MySQL. Even just a persudo code example would be a helpful starting point - this is one of the last parts of the jigsaw I am putting together.

P.S. Obviously I have the ACL object - is it going to be easier to interigate that or is it better to do it my self via PHP/MySQL?

The aim will be, show what a role can access which will then allow me to add or edit a role, controller and action in a GUI style (that is somewhat the easy bit) - currently I am updating the DB manually as I have been building the site.

© Stack Overflow or respective owner

Related posts about php

Related posts about mysql