1

カンマ区切りのリストを保持する 2 つの変数があります。1 つはパーミッション変数で、もう 1 つはページにアクセスしたい人のユーザーグループ リストです。

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 に答える