2017-02-28 91 views
1

我愿做一个权限检查,将禁止访问特定页面和按钮的用户,如果他们没有权限。在我的数据库中,我有一个用户表,权限表,然后是一个permission_user表,为每个用户分配权限。Laravel 5.2自定义用户权限检查

现在,我有其中显示与数据的所有汇总表页面,并有一组按钮有(查看,编辑等)和一些用户不能做所有这些,所以我想这些按钮不可见/禁用。我不想让他们访问使用这些按钮链接的受限制的页面,如果他们在URL中键入它(例如公共/管理/编辑/ ID)。

下面是目前可用的权限

PermissionID PermissionName 
     1   View 
     2   Add 
     3   Edit 
     4   Delete 

现在在我的permissions_user表就是这个样子

PermissionID AccountID 
     1    2 

这里是我的一块控制器

public function showDetails($action, $id) 
    { 
     return view('pages.admin.form_details', ['action' => $action, 'id' => $id]); 
    } 

这个例子功能将显示详细信息页面并返回操作(字符串,可以是查看或编辑)然后检查显示视图或编辑页面是否在我的刀片中完成。如果可能的话,我想要做的所有检查一次(就像你在每一页如何检查,如果用户登录或不通过中间件)。我实际上尝试过zizaco委托,但我不明白如何实现它,并最终将其从我的项目中删除。

我一直在考虑在每个页面控制器的show function中做这样的事情。

if($action == "edit) 
//check if edit permission exists for the authenticated user. if not abort and show error page. 

我认为这是低效率和重复这样做。会有更好的解决方案吗?或者,也许我可以整合更简单的软件包?

回答

1

Laravel 5.2有这样的正常功能:Authorizations

我更喜欢使用策略来定义的能力,因为他们可能是,如果您的应用程序的增长更具可扩展性。

  1. 注册政策

    protected $policies = [ 
        'App\Model' => 'App\Policies\ModelPolicy', 
    ]; 
    
    public function boot(GateContract $gate) 
    { 
         $this->registerPolicies($gate); 
    } 
    
  2. 定义策略

    public function index(User $user) 
    { 
        return // your validation; 
    } 
    
    public function create(User $user) 
    { 
        return // your validation; 
    } 
    
  3. 检查政策

在你的控制器:

public function store(ModelRequest $request) 
{ 
    $this->authorize('create', $model); 
    // your code to create a new model 
} 

在你看来:

@can('create', $post) 
    <!-- If user can create a model --> 
@endcan 

重要的是在控制器检查政策,以这种方式使用它,用户不会被允许进行任何的后续步骤,如果他没有正确的权限。

另一方面,其他SO用户提到了一些软件包,但您的请求非常简单,因此您可以使用Laravel的授权。

+0

感谢您的回答!这对我来说非常有帮助,因为我发现文档混乱。 –

+0

不客气... – georgeos

0

Laravel 5.2具有管理权限的内置方法:

https://laravel.com/docs/5.2/authorization

政策是特别好,他们所代表的那种你正在寻找的权限。

如果你需要更多的功能,看看laravel-permissionpackage spatie,它增加了很多功能,如角色管理。

+0

Spatie可能不错。我会尝试再次阅读文档以理解它。谢谢。 –

+0

我打算推荐laravel-permission软件包。我刚刚在我的应用程序中实现了这个软件包,而且值得花时间了解它的工作方式,而不是试图编写自己的/重复的代码。 – cbloss793

0

Laravel包含一个授权系统,该系统应该可以根据需要工作。你已经检查过了吗? https://laravel.com/docs/5.2/authorization

+0

我做到了,但我真的不太明白。这将与我的项目结构一起工作吗? –