使用Entrust Laravel

时间:2015-07-03 09:11:49

标签: laravel laravel-5

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

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

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

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

2 个答案:

答案 0 :(得分: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

例如admin有权限(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

在您的控制器/模特/回购

同样,您可以过滤models / controllers / repos等中的内容。

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

答案 1 :(得分:0)

简要说明,我们需要采取哪些措施来实施基于角色的权限 Entrust Laravel Package ,如下所示。

按照中提供的说明安装软件包 https://github.com/Zizaco/entrust

毕竟,完成了上面的Package(GitHub),如数据库表创建,中间件,控制器和所有。

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

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

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']]);     
    }
}

我们通常在Controller中有5个动作,如果我们在router / web.php文件中有单个路径(称为资源路由),则单个控制器的所有CRUD动作都可以。

在这个例子中,假设我们拥有所有这5种方法。所以我们也在权限表中输入了这些权限..就像我有

权限表

id  display_name    name
5   Delete Category category_delete
4   Edit Category   category_edit
3   Create Category category_create
2   List Category   category_index

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

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

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

那个'它!!

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

希望这有效!!