Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL中导航表的PHP用户权限_Php_Mysql - Fatal编程技术网

MySQL中导航表的PHP用户权限

MySQL中导航表的PHP用户权限,php,mysql,Php,Mysql,我的数据库中有两个表,一个名为admin,其中包含用户,另一个名为admin\u permissions,其中包含站点的页面以及用户将拥有的权限 两个表都有列: admin technical_support sales accounts 这些列为空白或Y 例如,如果admin表中的用户在admin列中有一个Y,这意味着他们是admin用户类型的成员,那么我希望能够检查admin\u permissions表,查看该用户角色是否有权访问该页面 我需要为每种用户类型执行此操作 我想首先为每个用户

我的数据库中有两个表,一个名为
admin
,其中包含用户,另一个名为
admin\u permissions
,其中包含站点的页面以及用户将拥有的权限

两个表都有列:

admin
technical_support
sales
accounts
这些列为
空白
Y

例如,如果admin表中的用户在admin列中有一个
Y
,这意味着他们是admin用户类型的成员,那么我希望能够检查
admin\u permissions
表,查看该用户角色是否有权访问该页面

我需要为每种用户类型执行此操作

我想首先为每个用户类型创建一个数组,如下所示:

$user_types = array('admin' => 'admin', 'technical_support' => 'technical_support', 'accounts' => 'accounts', 'sales' => 'sales');
然后,在我从
admin\u permissions
表中选择页面并查看用户是否是正确访问组的一部分后,循环遍历此数组,如下所示:

foreach($user_types as $perm_role => $user_role) {
    if($result[$perm_role] == $InternalUserResult[$user_role]) {

    }

}

$InternalUserResult is the objects returned from a query when selecting the current logged in user

以下查询将告诉您用户是否具有页面所需的任何权限:

SELECT COUNT(*) as permission
FROM admin AS a
JOIN admin_permissions AS p 
ON ((a.admin = 'y' AND p.admin = 'y')
    OR (a.technical_support = 'y' AND p.technical_support = 'y')
    OR (a.sales = 'y' AND p.sales = 'y' 
    OR (a.accounts = 'y' AND p.accounts = 'y'))
WHERE a.username = :user
AND p.page = :page
permission
如果他们有权限,则将为
1
,否则为
0

与其为每种权限类型都有单独的列,不如有一个表列出用户拥有的所有角色以及有权访问页面的组。这样,如果添加更多组,则不需要修改表和所有检查表的查询

SELECT COUNT(*) > 1 as permission
FROM user_groups AS u
JOIN page_permissions AS p ON u.type = p.type
WHERE u.username = :user
AND p.page = :page

谢谢你的意见,但为什么要在这里浪费时间呢?!因为“我有问题X,我试过Y,Z发生了”和“我有问题X,给我修一下”之间是有区别的。我们是来帮助你的,不是为你做你的工作。这意味着“显示您迄今为止所做的尝试”。用户是否必须拥有该页面的所有权限,或者仅匹配其中一个权限?例如,如果一个页面有
admin=Y,sales=Y
,那么用户是否必须同时是admin和sales组的成员?如果该页面有sales=Y,那么用户必须有sales=Y,但是如果该页面有sales=Y和admin=Y,那么只要用户有sales或admin,他们就可以使用第二个选项访问iTunes,桌子的结构是怎样的?我不确定我是否100%理解
用户组
用户名
列和
类型
,用户所在的每个组有一行<代码>页面权限有列
页面
类型
,每个有权访问该页面的组有一行。如果页面权限表中的页面需要两个用户组如何?它将有两行。就像我说的,每个有权访问页面的组对应一行。这是一个标准的多对多关系表。因此,如果页面有两个可以访问它的组,那么页面权限表中需要有两行吗?