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

本作品采用《CC 协议》,转载必须注明作者和本文链接
老郭博客:laughing: 个人博客地址:www.phpsix.com
PHPSIX
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 3

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

6年前 评论
PHPSIX

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

6年前 评论

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

5年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!