我正在使用laravel 5,并为角色和权限添加了Entrust。
我不知道如何使用权限。如果我有权限create-post
意味着它会做什么?
是否允许在Post控制器中创建选项?或者我们需要为页面分配一个权限名称?
请举个例子。甚至我都不知道在哪里检查权限。。。
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中定义一个过滤器,并在路线上应用
过滤器.pp
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
在您的控制器/型号/reso
类似地,你可以过滤模型/控制器/转发等中的内容
所以我想你已经有了基本的想法。现在,您几乎可以在任何地方使用Entrust函数。希望这能有所帮助。
简单地说,我们需要做些什么来实现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显示名称名称5删除类别Category_Delete4编辑类别Category_Edit3创建类别Category_Create2列表类别Category_index
我们只需要在我们的控制器中添加这些权限名称,就像我在CategoryController中所做的那样,如果你在权限表的名称文件中使用hyphon,那么像一样使用
$this->middleware('permission:category-create', ['only' => ['create', 'store']]);
在控制器构造函数中写入所有权限。
就是这样!!
它会自动检查登录用户的能力,并根据permission_role(角色和权限的关系表(中的数据库条目,显示该用户的页面或拒绝访问。
希望这能奏效!!