php - Laravel 5.2 自定义用户权限检查

标签 php laravel laravel-5

我想进行权限检查,如果用户没有权限,则不允许他们访问某些页面和按钮。在我的数据库中,我有一个用于用户、权限的表,然后有一个permission_user 表来为每个用户分配权限。

现在,我有一些页面,其中显示一个表格,其中包含所有数据摘要,并且那里有一组按钮(查看、编辑等),有些用户无法执行所有这些操作,所以我想要这些按钮隐形/禁用。如果他们在 URL 中键入这些按钮(例如 public/admin/edit/id),我不希望他们访问与这些按钮链接的受限页面。

以下是当前可用的权限

  PermissionID  PermissionName
        1            View
        2            Add
        3            Edit
        4            Delete

现在在我的 requests_user 表中是这样的

   PermissionID   AccountID
        1             2

这是我的 Controller 的一部分

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

此示例函数将显示详细信息页面并返回操作(查看或编辑的字符串),然后在我的 Blade 中完成查看或编辑页面的显示检查。如果可能的话,我想一次进行所有检查(就像用户是否通过中间件登录或未登录时如何检查每个页面一样)。我实际上尝试过 zizaco entrust,但我不明白如何实现它并最终将其从我的项目中删除。

我一直在考虑在每个页面 Controller 的显示函数中执行类似的操作。

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

我认为这样做效率低且重复。会有更好的解决方案吗?或者也许是一个我可以更容易集成的包?

最佳答案

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. 检查政策

在你的 Controller 中:

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

重要的是检查 Controller 中的策略,以这种方式使用它,如果用户没有正确的权限,则不会被允许执行任何后续步骤。

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

关于php - Laravel 5.2 自定义用户权限检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42511162/

相关文章:

php - Laravel 5 PDOException 找不到驱动程序

mysql - 包含 3 个数据的 SQL 分组

php - Laravel 模型中的默认随机值

mysql - Laravel 5 查询计数和分组

php - 如何更改 Laravel 中自动生成的迁移页面?

php - 引用 - 这个错误在 PHP 中意味着什么?

php - 更新后重定向用户

php - 在 laravel 中通过 ajax 返回 View

php - 如何播种自引用表 Laravel 5.1

php - 如何为字谜应用程序 (php) 创建子集词?