【问题标题】:Laravel roles and permissionsLaravel 角色和权限
【发布时间】:2017-09-13 10:55:21
【问题描述】:

我是 Laravel 的新手,我正在尝试基于角色构建应用程序,但在我的情况下,用户只能拥有一个角色(用户和角色之间没有数据透视表),我们可以创建新角色我们喜欢(为一个角色分配许多权限)。有什么帮助吗?非常感谢

【问题讨论】:

  • err,你尝试了什么..?另外,有什么理由反对使用包?如果你不介意,你可以从现有的包中学习......

标签: laravel


【解决方案1】:

所以这是我会做的一种方法。

你需要两张桌子:

  • 一张我称之为“等级”的表格,在其中您可以了解等级本身的所有信息:
    当然,它的 id 也是 :
    是管理员级别吗? (所有权限)
    它叫什么名字? ...

  • 我称之为“ranks_abilities”的一个表,在其中您可以了解有关等级可以做什么的所有信息
    因此,它将包含三列:id、rank_id 和能力名称

而且你需要把 rank_id 放在 users 表中。

注意:如果你想做得很好,你可以有一个包含所有可能能力的表“能力”,你可以引用他们的 ID 而不是名字

那么它是如何工作的呢?

因此您将拥有三个模型:

  • 用户
  • 排名
  • 排名能力

在您的 User 模型中,您将与 Rank 模型有一个 belongs_to 关系(称之为 rank) 在 Rank 模型内部,您与 RanksAbility 模型有一个 has_many 关系(称为 ranks_abilities)

我想我们现在对数据库结构很好,让我们开始允许做一些事情。

所以,当然,在需要登录的地方,你有完美的身份验证中间件

然后,要自己处理权限,有几种方法可以做到,这是我推荐的一种。

第一步:

为某些操作创建策略,例如,如果您有帖子,您可以创建 PostPolicy (https://laravel.com/docs/5.4/authorization#creating-policies)

例如,如果您想要一个权限,以便用户可以编辑所有帖子,您将在该 PostPolicy 中有一个更新方法

public function update(User $user, Post $post)
{
    return $user->hasPermission('post.update'); // You can also add other permissions for example if the post belongs to your user I'd add || $post->user_id == $user->id
}

我会做这样的事情。

然后,您必须创建 hasPermission 方法。

所以,在你的用户模型中,你可以这样写:

public function hasPermission($permission){
    if(!$this->relationLoaded('rank')){
        $this->load('rank', 'rank.ranks_abilities');
    }
    if(!$this->rank){
        return false;// If the user has no rank, return false
    }
    foreach($this->rank->rank_abilities as $ability){
        if($permission === $ability->name){
            return true;// If the user has the permission
        }
    }
    return false;
}

到这里方法就完成了。

最后一步,您可以使用此处列出的所有方法https://laravel.com/docs/5.4/authorization#authorizing-actions-using-policies 来避免用户做他不能做的事情。

就我个人而言,我会做一个 FormRequest,并用它来处理授权 (https://laravel.com/docs/5.4/validation#authorizing-form-requests)。

我希望清楚,如果您还有其他问题,请继续

【讨论】:

    【解决方案2】:

    要设置自定义用户角色和权限,您可以尝试https://thewebtier.com/laravel/understanding-roles-permissions-laravel/

    这是关于如何在 Laravel 项目中设置角色和权限的完整指南。

    【讨论】:

      猜你喜欢
      • 2014-09-15
      • 2019-04-27
      • 2019-07-31
      • 1970-01-01
      • 2022-01-01
      • 2021-02-02
      • 2016-05-22
      • 1970-01-01
      • 2020-11-01
      相关资源
      最近更新 更多