【问题标题】:Workflow of role/permission based content filtering using Entrust Laravel使用 Entrust Laravel 的基于角色/权限的内容过滤工作流程
【发布时间】:2015-07-03 09:11:49
【问题描述】:

我正在使用 laravel 5 并为角色和权限添加了 Entrust。

我不知道如何使用权限。如果我有权限create-post 意味着它会做什么?

Post 控制器中的创建选项是否允许?或者我们需要给页面分配一个权限名称?

请举个例子。即使我不知道在哪里检查权限...

【问题讨论】:

    标签: laravel laravel-5


    【解决方案1】:

    Entrust的工作流程如下

    创建角色

    Role::create(['name' => $role]);
    

    例如管理员、读者等

    创建权限

    Permission::create($permission);
    

    例如 can_read_post、can_edit_post、can_delete_post

    为角色分配权限

    $role = Role::where('admin)->first();
    $role->perms()->sync($ids); //here the ids are ids of permissons which you want to assign
    

    例如,管理员有权限(can_read_post、ca_edit_post、can_delete_post),读者有权限(ca_read_post)

    为用户分配角色

    您可以为多个用户分配一个角色。

        $user->roles()->attach($roleId);
    

    根据角色或权限过滤内容

    基本设置已完成。现在您可以使用不同的方法过滤您网站的内容。在这里我将讨论一些

    在filters.php中定义一个过滤器并应用于路由

    filters.php

    Route::filter('admin', function()
    {
        if(!Entrust::hasRole('Administrator'))
        {
            return Redirect::to('/');
        }
    });
    

    routes.php

        Route::group(['before' => ['admin']], function(){
          //add some routes which will require admin role
          //any user which has not admin role will be redirected to home page
        }
    

    在你看来

    @if(Entrust::can('can_edit_post'))
    //add some html which will only be visible to users who has such a role which has this permission
    @endif
    

    在您的控制器/模型/存储库中

    同样,您可以过滤模型/控制器/存储库等中的内容。

    所以我想你已经有了基本的想法。现在您几乎可以在任何地方使用 Entrust 功能。希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      简单来说,为了实现基于角色的权限,我们需要执行 Entrust Laravel Package 如下。

      安装包按照给出的说明 https://github.com/Zizaco/entrust

      毕竟,像数据库表创建、中间件、控制器和所有这些都是用上面的包(GitHub)完成的。

      当用户登录系统时,会有一个 Auth 提供的数组,其中包含用户可以执行的所有操作(登录用户可以执行的操作能力)。

      假设我们有一个名为 CategoryController 的控制器,如下所示。

      class CategoryController extends Controller
      {   
          public function __construct()
          {                
              $this->middleware('permission:category_index', ['only' => ['index']]); 
              $this->middleware('permission:category_create', ['only' => ['create', 'store']]);
              $this->middleware('permission:category_edit', ['only' => ['edit', 'update']]);
              $this->middleware('permission:category_delete', ['only' => ['delete']]);
              $this->middleware('permission:category_view', ['only' => ['show']]);     
          }
      }
      

      我们通常在一个控制器中有 5 个动作,如果我们在我们的 routers/web.php 文件中有一个路由(称为资源路由)用于单个控制器的所有 CRUD 动作。

      在这个例子中,假设我们拥有所有这 5 个方法。所以我们在权限表中也有这些权限的条目..就像我一样

      权限表

      id display_name 名称 5 删除类别 category_delete 4 编辑类别 category_edit 3 创建类别 category_create 2 列出类别 category_index

      我们只需要在我们的控制器中添加这些权限名称,就像我在 CategoryController 中所做的那样,如果您在权限表的名称字段中使用 hyphon,则使用 like

      $this->middleware('permission:category-create', ['only' => ['create', 'store']]);
      

      在控制器构造函数中写入所有权限。

      就是这样!!

      它会自动检查登录用户的能力,并根据permission_role中的数据库条目(角色和权限的关系表),它会显示该用户的页面或拒绝访问。

      希望这行得通!

      【讨论】:

        猜你喜欢
        • 2017-02-06
        • 2018-05-29
        • 1970-01-01
        • 2017-02-05
        • 2020-12-17
        • 2015-09-30
        • 2023-03-15
        • 2016-10-22
        • 2021-08-06
        相关资源
        最近更新 更多