1

半管理者 (MySQL データベースから設定) であるユーザーが、新しいページの作成、編集、または削除などの権限を持っているかどうかを確認する PHP 関数またはクラスを作成するにはどうすればよいですか? ユーザーのアクセス許可を確認してから、次のようなコードを表示する関数が必要です。

  if ($he_can_create_page){
  //continue the script.....
  }else{
  //don`t continue
   }

現在、私は次のようなセッションを使用しています。

    If($_SESSION['user_type']=='Admin'||$_SESSION['user_type']=='premium'){
 //do stuff
 }else if()......... {
  // ..............
   }

しかし、それらは if ステートメントが多すぎるので、よりクリーンなコードが必要です :)

4

4 に答える 4

3
interface User {

    public function canCreatePage();
    public function canDeletePage();
    public function canEditPage();
    ....
}

class Admin implements User {

    public function canCreatePage(){
        return true;
    }

    public function canEditPage(){
        return true;
    }
    ...
}

class Editor implements User {

     public function canCreatePage() {
          return false;
     }

     public function canEditPage(){
        return true;
     }

     ...

}

次に、データベースで取得したものから

if ($row['user_type'] == 'Admin') {
   $user = new Admin();
} else if $row['user_type'] == 'Editor') {
   $user = new Editor();
}  ....

すべてのページで:

if ($user->canCreatePage()){
  //continue the script.....
}else{
  //don`t continue
}

データベースから初めて取得したときにユーザーをセッションに保存する場合

$_SESSION['user'] = serialize($user);

次のページで

$user = unserialize($_SESSION['user']);

または、ユーザーの ID をセッションに保存し、すべてのページで DB から取得することもできます。

于 2013-05-05T13:26:01.257 に答える
0

答えは、アクセス制御システムを使用することです。多くの異なるタイプがあります。(Web 開発で) 最もよく使用されるのは、ACL (アクセス制御リスト) と RBAC (ロールベースのアクセス制御) です。ルールは、データベースから入力するか、ハードコードすることができます。

それらがどのように機能するかを理解するには、Zend Framework のACLRBACの例を見てください。Zend Framework では、ACL にもロールがあるため、ACL は RBAC とそれほど違いはありません。ただし、通常、ACL はユーザー ベースであり、ロール ベースではありません。必要に応じて、Zend またはその他のフレームワークの ACL/RBAC を独自のプロジェクトに統合できます。

yii のやり方について読んでください: yii RBAC

于 2013-05-05T13:23:06.570 に答える
0

汎用関数を作成し、このようなすべてのファイルに共通のファイルに入れます

 function pageCreatePermission() {
     if($_SESSION['user_type']=='Admin'||$_SESSION['user_type']=='premium'){

          return true;

     } else { 
          return false;
}

次に、この関数をファイルで次のように使用します

if (pageCreatePermission()) {
     //do your stuff
 } else {
     //show error you want
 }
于 2013-05-05T13:14:57.880 に答える
0

次のような列を users テーブルに追加します。

| canEdit | canDelete | canCreate |

フラグ 1/0 付き。真の場合は 1、偽の場合は 0。

フィールドを選択してチェックを行います。

if($row['canEdit'] = 1) {
//continue (return true)
}
else {
//stop (return false)
}

パラメータを使用して関数にすることができるため、関数にパラメータを与える、つまり $canDelete (これは $row データです) と、その権限のみをチェックします。

function userPermissions($type)
 if($type=1) {
   return true;
 }
 else {
   return false;
 }


$canCreate = $row['canCreate'];

if(userPermissions($canCreate)) { ...
于 2013-05-05T13:14:26.570 に答える