Jump to content

Archived

This topic is now archived and is closed to further replies.

franky

4 tables - 1 query

Recommended Posts

I need to create a permission system, where multiple permissions can be assigned to multiple roles. These roles can then be assigned to multiple users.

 

These are the tables where the permissions and roles are stored:

CREATE TABLE some_perms (

perm_id mediumint(8) NOT NULL auto_increment,

perm_name varchar(32) NOT NULL default \'\',

perm_desc varchar(255) NOT NULL default \'\',

PRIMARY KEY  (perm_id)

) TYPE=MyISAM;



CREATE TABLE some_roles (

role_id mediumint(8) NOT NULL auto_increment,

role_name varchar(32) NOT NULL default \'\',

role_desc varchar(255) NOT NULL default \'\',

PRIMARY KEY  (role_id)

) TYPE=MyISAM;

 

Now, I need to create 2 tables (don\'t know if I got it right) to hold what permissions belong to what roles, and what roles belong to what users:

CREATE TABLE some_role_perms (

role_id mediumint(8) NOT NULL default \'0\',

perm_id mediumint(8) NOT NULL default \'0\',

perm_status tinyint(1) NOT NULL default \'0\',

KEY role_perm_id (role_id, perm_id)

) TYPE=MyISAM;



CREATE TABLE some_user_roles (

user_id mediumint(8) NOT NULL default \'0\',

role_id mediumint(8) NOT NULL default \'0\',

KEY user_role_id (user_id, role_id)

) TYPE=MyISAM;

 

I know how to assign permissions/roles, add new ones, etc. But I have no idea how to get all available permissions for a user id in a single query. I know how to do it in multiple queries, but I want to do it in 1 query. I know it\'s possible, I just don\'t know how.

 

Could anyone help me on this issue?

Share this post


Link to post
Share on other sites

SELECT p.perm_name, p.perm_desc FROM

(some_perms p INNER JOIN some_role_perms r

ON p.perm_id = r.perm_id)

INNER JOIN some_user_roles u

ON r.role_id = u.role_id

WHERE u.user_id = $userid

 

hth

Share this post


Link to post
Share on other sites

×

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.