ホームページ >PHPフレームワーク >ThinkPHP >ThinkPHP プロジェクト チームの権限を設定する方法

ThinkPHP プロジェクト チームの権限を設定する方法

WBOY
WBOY転載
2023-05-27 20:55:261168ブラウズ

1. ThinkPHP 権限設定について理解する

権限設定とは、ユーザーが対応する操作を実行できるように、ユーザーの権限範囲に応じて操作権限を割り当てることを指します。 ThinkPHP フレームワークでは、RBAC (Role-Based Access Control) を通じて権限設定を実装できます。ロールベースのアクセス制御 (RBAC) は、ユーザーではなくロールに基づいてアクセス許可を割り当て、ロールを割り当てることでユーザーにアクセス許可を付与するアクセス制御モデルです。 RBAC には次の特徴があります:

  1. ロールへのアクセス許可を承認し、管理を容易にするためにユーザーにロールを割り当てます。

  2. ユーザーが必要とするのは、ロール。そのロールが所有するすべての権限を持つことができます。

  3. #システムは拡張と保守が容易で、優れたスケーラビリティを備えています。

  4. 権限が実装される ビジネス ロジックからの分離により、コードの再利用とアクセスのセキュリティが大幅に向上します。

#2. RBAC ベースの権限設定手順

ステップ 1 権限テーブルを作成します

  1. ID、名前、タイトル、ステータスのフィールドを含む権限テーブルをデータベースに作成します。

  2. ID フィールドと名前フィールドは主キーと権限識別子です。

  3. title フィールドは権限名です。

  4. status フィールドは権限ステータスで、1 は有効を表し、0 は無効を表します。

  5. #ステップ 2 ロール テーブルの作成

    フィールド ID、名前、タイトル、ステータスを含むロール テーブルをデータベースに作成します。
  1. id ​​フィールドと name フィールドは主キーとロールの識別です;
  2. title フィールドはロール名です;
  3. ## ステータス フィールドはロールのステータスで、1 は有効、0 は無効を意味します。
  4. ステップ 3 ユーザー テーブルの作成

フィールド ID、ユーザー名、パスワード、ステータスを含むユーザー テーブルをデータベースに作成します。
  1. id ​​フィールドは主キー、
  2. username はユーザー名、
  3. password はパスワードです。
  4. status はユーザーのステータスを表し、1 は有効、0 は無効を表します。
  5. #ステップ 4 ユーザー ロール関連付けテーブルの作成

フィールド user_id と role_id を含むユーザー ロール関連付けテーブルをデータベースに作成します。

  1. user_id はユーザー ID、

  2. role_id はロール ID です。

  3. #ステップ 5 ロール権限関連付けテーブルの作成

#フィールド role_id および rules_id を含むロール権限関連付けテーブルをデータベースに作成します。

  1. role_id はロール ID、

  2. rule_id は権限 ID です。

  3. ステップ 6 権限制御の実装

    ThinkPHP プロジェクトで権限制御を実装する方法は次のとおりです。

プロジェクトで、すべてのユーザーのアクセス許可制御を実装できるパブリック コントローラー CommonController を定義します。

  1. アクセス許可の検証を実装する Auth クラスを作成します。

  2. 以下に示すように、権限制御は CommonController クラスで実行されます。

  3. public function _initialize(){
        if(!authcheck()){
    
            }
        }
    
    public function authcheck(){
        $auth=new Auth;
        if($auth->check(MODULE_NAME.'/'.CONTROLLER_NAME.'/'.ACTION_NAME,session('uid'))){
            return true;
        }else{
            return false;
        }
    }
  4. Auth クラスでは、以下に示すように権限検証のロジックが実装されます。
    class Auth {
        //检查权限
        public function check($name, $uid){
            if(in_array($uid, C('AUTH_SUPER_ADMIN'))){
                return true;
            }
            $infos=M('user')->field('role_id')->where('id='.$uid)->find();
            $role_id=$infos['role_id'];
            $rules=M('access')->where('role_id='.$role_id)->select();
            foreach($rules as $v){
                $rule_ids[]=$v['rule_id'];
            }
            $rules=M('rule')->where('id in ('.implode(',',$rule_ids).')')->select();
            foreach($rules as $r){
                $urls[]=$r['name'];
            }
            if(in_array($name,$urls)){
                return true;
            }else{
                return false;
            }
        }
    }
  1. 上記のコードで実装されたロジックは、すべてのユーザー操作リクエストに権限検証を追加することです。バリデーターは、権限制御が必要な操作を要求するときに、ユーザーがスーパー管理者権限を持っているかどうかを最初に確認します。ユーザーがスーパー管理者の場合、検証は直接行われます。ユーザーがスーパー管理者ではない場合、ユーザーのロール ID に基づいて、ロールが所有する権限 ID のリストが検索されます (関連付けテーブルからのクエリ)。ユーザー テーブル)、アクセス許可 ID リストに従って対応するアクセス許可名リストを検索します。要求された操作名がアクセス許可名リストにある場合は検証に合格し、そうでない場合はアクセス許可の検証は失敗します。

以上がThinkPHP プロジェクト チームの権限を設定する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。