检查用户组是否存在

时间:2013-05-14 08:06:17

标签: php mysql

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

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

谢谢:)

4 个答案:

答案 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)