Laravel - Entrust 使用方法

Entrust使用方法-start

  • 在控制器中的用法

            //        判断用户角色
                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']

Entrust使用方法-end

老郭博客:laughing:
个人博客地址:https://www.phpsix.com

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 3
XiaohuiLam

你这高产的速度。。。。太

1年前
PHPSIX

@NicolaBonelli 哈哈,拼死累活的写代码。:smiley:

1年前

blade里面使用@role不起作用怎么回事,不管true还是false都会隐藏资源

7个月前

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!