我有两个变量,它们都包含逗号分隔的列表。一个是权限变量,另一个是想要访问页面的人的用户组列表。
1 =用户
2 =编辑
3 =主持人
4 = admin
<?php
$query = mysql_query("SELECT * FROM users WHERE id='{$user['id']}'");
$user = mysql_fetch_assoc($query);
$query2 = mysql_query("SELECT * FROM menu WHERE active='1'");
$page = mysql_fetch_assoc($query2);
echo $user['usergroup']; // 1
echo $page['usergroup']; // 2,3,4
?>
我需要帮助才能找到比较两个变量的方法,以检查他们是否有合适的用户组来访问页面
如果$ user ['usergroup']包含来自$ page ['usergroup']的数字,请执行X否则执行Y
谢谢:)
答案 0 :(得分:1)
试试这个:
$query = mysql_query("SELECT * FROM users WHERE id='{$user['id']}'");
$user = mysql_fetch_assoc($query);
$query2 = mysql_query("SELECT * FROM menu WHERE active='1'");
$page = mysql_fetch_assoc($query2);
$pageGroups = explode(',', $page['usergroup']);
if (array_search($user['usergroup'], $pageGroups) !== false) {
//TODO: User have access
}
答案 1 :(得分:1)
$user = "1,3,5";
$page = "1,2,5";
//explode and trim for a case you have spaces '1, 2,3 ,4'
$u = array_map('trim', explode(",", $user));
$p = array_map('trim', explode(",", $page));
$intersect = array_intersect( $u, $p );
if ( count($intersect) )
{
//ok
print_r( $intersect );
}
else
{
//error
}
允许的权限:
Array
(
[0] => 1
[2] => 5
)
答案 2 :(得分:0)
虽然我不会将权限存储为逗号分隔字符串,但这样的内容可能就是您要找的内容:
$pageaccess = explode(',', $page['usergroup']);
if(in_array($user['usergroup'], $pageaccess)) {
// Has permissions. Code goes here.
}
编辑:将$权限重命名为$ pageaccess
答案 3 :(得分:0)
虽然你得到的所有答案都应该有用,但我想为你的方法添加评论。将逗号分隔列表存储到数据库中绝不是一个好主意。它冒犯了数据库规范化的概念。
您应该重新考虑数据库设计,而不是存储逗号分隔列表。可能的方法可能是:
users (user_id, username)
permissions(permission_id, permission)
user_permissions(up_id, permission_id, user_id)
由于您不需要进一步处理来自数据库的数据,因此效率更高。您只需查询数据库并询问用户是否具有特定权限。
SELECT `up_id` FROM `user_permissions` WHERE `user_id` = '{$uid}' AND `permission_id` = {5}
更进一步,你可以组装一个小的访问控制列表:
users (user_id, username)
groups (group_id, name)
user_groups(ug_id, group_id, user_id)
permissions(permission_id, permission)
group_permissions(gp_id, group_id, permission_id)