1

我有 2 个变量,它们都包含逗号分隔的列表。一个是权限变量,另一个是想要访问页面的人的用户组列表。

1 = 用户

2 = 编辑

3 = 主持人

4 = 管理员

    <?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

谢谢 :)

4

4 回答 4

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
}
于 2013-05-14T08:08:44.063 回答
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
)
于 2013-05-14T08:23:08.823 回答
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)
于 2013-05-14T08:19:43.277 回答
0

尽管我不会将权限存储为逗号分隔的字符串,但您可能正在寻找类似这样的内容:

$pageaccess = explode(',', $page['usergroup']);

if(in_array($user['usergroup'], $pageaccess)) {
    // Has permissions. Code goes here.
}

编辑:将 $permissions 重命名为 $pageaccess

于 2013-05-14T08:13:39.360 回答