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%理解用户组
有用户名
列和类型
,用户所在的每个组有一行<代码>页面权限有列页面
和类型
,每个有权访问该页面的组有一行。如果页面权限表中的页面需要两个用户组如何?它将有两行。就像我说的,每个有权访问页面的组对应一行。这是一个标准的多对多关系表。因此,如果页面有两个可以访问它的组,那么页面权限表中需要有两行吗?