Laravel - Entrust 使用方法

PHPSIX發表於2017-11-15
  • 在控制器中的用法

            //        判斷使用者角色
                dd(auth()->user()->hasRole('admin'));
                dd(auth()->user()->hasRole('user'));
            // 多個角色判斷(滿足其中一個即可,第二個可選引數,true時需要同時滿足)
                dd(auth()->user()->hasRole(['admin','user']));  //或者
                dd(auth()->user()->hasRole(['admin','user'],true));   //並且
    
            //        判斷使用者是否有相應許可權
                dd(auth()->user()->can('create users'));
    
            //        匹配模式
                dd(auth()->user()->can('*users'));
    
            // 多個許可權判斷(滿足其中一個即可,第二個可選引數,true時需要同時滿足)
                dd(auth()->user()->can(['create users','aaa']));        //或者
                dd(auth()->user()->can(['create users','aaa'],true));   //並且
    
            // 判斷角色和許可權其他用法
                Entrust::hasRole('role-name');
                Entrust::can('permission-name');
    
                // is identical to
                Auth::user()->hasRole('role-name');
                Auth::user()->can('permission-name');
    
            // 匹配判斷
            // match any admin permission
                $user->can("admin.*"); // true
    
            // match any permission about users
                $user->can("*_users"); // true
    
            //        判斷使用者是否有第一個陣列中得角色和第二個陣列中得許可權,第三個陣列中得validate_all 如果為 true 則為或者操作,如果為 false 則為並且操作, return_type 為整個判斷返回的型別,可以為bool型別,可以為陣列,也可以為 both ,both則是把每個判斷的結果以陣列的形式展現。
            dd(auth()->user()->ability(
                array('admin','user'),
                array('create users','edit users'),
                ['validate_all' => true,'return_type' => 'both']
            ));
            //下面的方法和上面的一致
            dd(auth()->user()->ability(
                    array('admin', 'user'),
                    array('create users', 'edit users'),
                    array('validate_all' => true,'return_type'  => 'both')
            ));
    
            $user->ability('admin,owner', 'create-post,edit-user');
    
            // 第三個可選引數為陣列
            $options = array(
                'validate_all' => true | false (Default: false),
                'return_type'  => boolean | array | both (Default: boolean)
            );
    
            $options = array(
                'validate_all' => true,
                'return_type' => 'both'
            );
    
            //下面的方法和上面的判斷 結果是一致的,只不過寫法不同而已。
            list($validate, $allValidations) = $user->ability(
                array('admin', 'owner'),
                array('create-post', 'edit-user'),
                $options
            );
    
            var_dump($validate);
            // bool(false)
    
            var_dump($allValidations);
            // array(4) {
            //     ['role'] => bool(true)
            //     ['role_2'] => bool(false)
            //     ['create-post'] => bool(true)
            //     ['edit-user'] => bool(false)
            // }
    
            // 等價寫法
            Entrust::ability('admin,owner', 'create-post,edit-user');
    
            // is identical to
            Auth::user()->ability('admin,owner', 'create-post,edit-user');
  • 模版標籤
        @role('admin')
            <div class="panel-body">
                <p>admin</p>
            </div>
        @endrole
        @permission('create users')
            <div class="panel-body">
                <p>create users</p>
            </div>
        @endpermission
        @ability('admin,owner', 'create-post,edit-user')
            <div class="panel-body">
                <p>'admin,owner', 'create-post,edit-user'</p>
            </div>
        @endability
  • 中介軟體

        Route::group(['prefix' => 'admin', 'middleware' => ['role:admin']], function() {
            Route::get('/', 'AdminController@welcome');
            Route::get('/manage', ['middleware' => ['permission:manage-admins'], 'uses' => 'AdminController@manageAdmins']);
        });
    • 傳遞多個引數(分隔中介軟體名和引數名來指定,多箇中介軟體引數可以透過逗號分隔):

          'middleware' => ['role:admin|root']
      
          'middleware' => ['permission:owner', 'permission:writer']
      
          'middleware' => ['ability:admin|owner,create-post|edit-user,true']
本作品採用《CC 協議》,轉載必須註明作者和本文連結
老郭部落格:laughing: 個人部落格地址:www.phpsix.com

相關文章