2012-03-11 12 views
0

私は現在、ユーザーができる情報を保持する配列を持っています。私は現在、非常に良いドロップダウンメニューでこれの1つのインスタンスを使用しています。私が今やりたいことは、特定のアイテムがアクセスできる場合にのみそのアイテムを含めることです。ですから$ user_access = 2ならば、Download-> small_imageはできますが、Download-> large_imageはできません。私は配列内の各項目のデフォルトのアクセス権を割り当てることができるようにしたいと思います。だから私はユーザーアクセスが0であると言うことができるので、 "ダウンロード"を全く表示すべきではありません。は、配列にさらにデータを追加しました

私は多分オブジェクトにそれぞれのアクセス整数を置くことを考えました。だから$アクセス - >ダウンロード - > small_image = 2;アクセスレベルがそれ以上かそれを配列に追加すれば1つ1つ確認できますか?私は実際にどのようにループを実行し、配列を正しく構築するのか分かりません。もう一つの方法は...多分実際の配列に何らかの形でアクセスの値を入れますか?どんなアイデアも素晴らしいだろう。

$var = array("Download" =>             
        array("small_image" => "ajax_load",       
         "large_image" => "/master.php"),      
        "Page" =>              
        array("Edit" => "edit.php",         
         "View" => "view.php",         
         "Stuff" => "stuff.php")         
        );  

答えて

0

オプションは無制限であるため、アクセス制御は常に曖昧な質問です。あなたがアクセス配列、IEと幸せになるように聞こえる:

$ACL = array(
    "Download" => array(
     "Small_Image" => 10, 
     "Large_Image" => 20 
    ), 
    "Page" => array(
     "Edit" => 0, 
     "View" => 10 
    ) 
); 

その後認可する関数を呼び出す:私はおそらく、あなたのACL(アクセス制御リスト)の配列を使用することになり

array(
    0 => "root", 
    10 => "Group1", 
    20 => "Group2" 
); 

function checkACL($option, $arg, $lvl) 
{ 
    if($ACL[$option][$arg] >= $lvl) 
     return true; 
    else 
     return false; 
}; 

$userLevel = 10; 
if(checkACL("Page", "Edit", $userLevel)) { 
    /* 
    * Display Edit page here. 
    */ 
} else { 
    /* 
    * Display "Not authorized" or redirect to a different page. 
    */ 
} 

申し訳ありませんが、あまりにも話題になりませんでした。
しかし、それをあなたのメニューを表示するために適応させることができます。私はあなたが粗いのすでにログインシステムを持っていると仮定しています:)

if(checkACL("Download", "Small_Image", $userLevel)) 
    echo '<a href="'.$var['Download']['Small_Image'].'">Small Image</a>'; 

編集:

$var = array(
    "download.small_image" => array(
     "id" => 1001, 
     "file" => "/img/blue.png", 
     "width" => "100px", 
     "height"=> "100px", 
     "accessLevel"=> 20 
    ), 
    "page.listUsers" => array(
     "id" => 1011, 
     "file" => "/pages/list.php", 
     "accessLevel" => 10 
    ) 
); 

だから、同じ原理で動作しますが、すべての情報が一元化されています。
データベースを使用していない場合は、jsonファイルとして保存します。
PHPファイルにハードコードしたくない場合は、簡単に変更できます。

// This will load your permissions into $var 
$var = json_decode(file_get_contents("/acl.json")); 

// If you design a page to modify permissions, you can save the file with this. 
file_put_contents("/acl.json", json_encode($var)); 

// json is simple, it's basically just { "key" : "val" } 
+0

@Bradley_Forster - つまり、同じことについて2つの配列を持つ必要があります。つまり、$ ACL配列と元の配列は同じですか?私はあなたが持っているアイデアが気に入っていますが、アイテムが変わった場合は2カ所で変更するのは非効率的です。オブジェクトで何かをするのが効率的になるのでしょうか? – user983223

+0

ああ、私はそれを見過ごした。私はデータベースを扱うことに慣れています。ここでは、aclテーブル、ユーザーテーブル、その他に必要なものがあります。また、1人のユーザーが1つのクエリですべてを取得できます。私はどのようにそれを見て、同じ概念を使用することができますかわからない..私は編集を行います。 – Bradmage

+0

mysqlの使い慣れたことはわかりませんが、興味があれば私は入門書を持っています。[http://stackoverflow.com/a/9651249/1246494](http://stackoverflow.com/a/ 9651249/1246494) – Bradmage

関連する問題