Let me first give you a diagram of the relationships between the tables used in my mysql query:

(source: r717.net )
I have a query that looks like this:
SELECT *
FROM 'permissions'
WHERE 'id' IN (
SELECT pr.perm_id
FROM 'user_roles' as ur
LEFT JOIN 'permissions_role' as pr
ON ur.role_id = pr.role_id
WHERE ur.user_id = '$userid'
)
OR 'id' IN (
SELECT 'perm_id'
FROM 'permissions_user'
WHERE 'user_id' = '$userid'
)
$useridis the identifier from the user table for the current user. I save the permission name from the result in an array that represents all the permissions assigned to the user based on his / her role and his / her identifier:
<?php
$user_perms = array();
if(mysql_num_rows($query) > 0):
while($result = mysql_fetch_array($query):
$user_perms[] = $result('name');
endwhile;
endif;
?>
print_r($user_perms); produces output that looks like this:
Array (
[0] => ACCESS_TELEPHONELIST_PAGE
[1] => ACCESS_VACATIONSCHED_PAGE
[2] => ACCESS_TOURSCHED_PAGE
[3] => ACCESS_WORKSCHED_PAGE
[4] => ACCESS_RESOURCES_LINKS
[5] => ACCESS_PMTOOL_PAGE
[6] => ACCESS_TOOLSTOOL_PAGE
[7] => ACCESS_SHOPTOOLLIST_PAGE
[8] => ACCESS_TOOLINVENTORY_PAGE
[9] => ACCESS_MANAGETOOLLIST_PAGE
[10] => ACCESS_TOOLREPORTS_PAGE
[11] => ACCESS_JOBSLIST_LINKS
[12] => MAIN_TAB_TOOLSTOOL
[13] => ADMIN_TAB_PODMANAGEMENT
[14] => TOOL_TAB_SHOPTOOLLIST
)
. , , :
SELECT permissions.*, usersroles.role_id
FROM 'permissions'
INNER JOIN (
SELECT ur.user_id, pr.perm_id, ur.role_id
FROM 'user_roles' as ur
LEFT JOIN 'permissions_role' as pr
ON ur.role_id = pr.role_id
WHERE ur.user_id = '$userid'
) AS usersroles ON usersroles.perm_id = permissions.id
INNER JOIN (
SELECT 'perm_id', 'user_id'
FROM 'permissions_user'
WHERE 'user_id' = '$userid'
) AS userperms ON userperms.user_id = usersroles.user_id
AND userperms.perm_id = permissions.id
, , ...
<?php
$user_perms = array();
$user_roles = array();
if(mysql_num_rows($query) > 0):
while($result = mysql_fetch_array($query):
$user_perms = $result('name');
$user_roles = $result('role_id');
endwhile;
endif;
?>
... :
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given
print_r($user_roles); , :
Array (
[0] => administrator
[1] => humanresources
[2] => podmanager
)
- , , 2 ?
: , 2 , ImreL. . , , , , , 2 . ImreL!