【问题标题】:Laravel Roles & Permissions with AuthorityLaravel 角色和权限与权限
【发布时间】:2014-09-15 04:13:24
【问题描述】:

根据我的研究,我发现权限包 (https://github.com/machuga/authority-l4) 最适合实施基于角色/权限的用户身份验证系统,同时保持灵活性。我无法准确理解如何使用这个包。该文档涵盖了它的功能和配置,但没有解释一些事情。希望有人能指出我正确的方向。

配置文件的用途是什么?指定权限?这些不是存储在数据库中吗?

我看到您可以使用别名将权限组合在一起。如果我不想使用别名怎么办。有没有办法自己创建一个权限?

我看到您可以为资源创建规则,例如只允许用户编辑分配给他们的帖子。该文档似乎没有太多关于此的信息。

任何帮助将不胜感激。搜索了互联网,但没有找到太多关于这个包的信息。

【问题讨论】:

    标签: php laravel laravel-4 user-permissions authority


    【解决方案1】:

    Laravel 内置了很多包来实现角色和权限,但我发现spatie/laravel-permission 是最好的。

    我从User role and permission in Laravel 找到了解决方案

    【讨论】:

      【解决方案2】:

      我没有使用权威,虽然我正在为一个项目寻找它。根据我对文档的阅读,它的工作方式如下:

      config 文件用于指定包的配置。角色和权限可以存储在数据库中(尽管不是必须的)。

      配置文件用于告诉包如何工作。因此,例如,配置文件允许您为一个或多个权限设置别名 - 如果您使用别名,则需要预先完成,以便包按您期望的方式工作。再举一个例子,可以(并且应该)在配置中设置规则(稍后会详细介绍)。

      考虑以下配置(来自权威文档):

      return array(
      
          'initialize' => function($authority) {
              $user = $authority->getCurrentUser();
      
              //action aliases
              $authority->addAlias('manage', array('create', 'read', 'update', 'delete'));
              $authority->addAlias('moderate', array('read', 'update', 'delete'));
      
              //an example using the `hasRole` function, see below examples for more details
              if($user->hasRole('admin')){
                  $authority->allow('manage', 'all');
              }
          }
      
      );
      

      这是在做什么?让我们一步一步来:

      首先,这是指定应用程序初始化时应该发生的事情。据推测,可能还会发生其他事件,但我不确定您为什么要在应用程序初始化后更改规则。当应用程序初始化时,会调用闭包。

      闭包这样做:

      1. 获取当前用户 - 以后的规则取决于谁登录

      2. 设置几个别名 - '因为我们很懒,不想为createread 等一一指定规则。我们可以改用manage

      3. 接下来检查当前用户。如果他们是管理员,他们将获得对 all 资源的 manage 权限。

      如果您的访问控制信息存储在数据库中,您可以在此处加载它并使用该数据来设置您的规则。

      现在,在稍后执行您的应用程序时,您需要检查并查看用户是否可以,例如,创建用户记录。在您的控制器中执行此操作:

      if( Authority::can('create', 'User') ) {
          User::create(array(
              'username' => 'someuser@test.com'
          )); 
      } else {
          // what happens if the user's trying to do something they're not
          // allowed to do?
          throw new Exception("No way man!");
      }
      

      这会检查您在配置中设置的规则,并确定是否允许用户执行此操作。如果不是,那么(在我的示例中)抛出异常。您可能希望更优雅地处理它。

      Authority 让您可以灵活地更精确地定义您的权限。例如,

      Authority::allow('manage', 'User', function($self, $user){
          return $self->getCurrentUser()->id === $user->id;
      });
      

      此规则包括一项检查,允许用户管理他们自己的用户记录,但没有其他人的。为此,您需要调整上面的示例。

      if( Authority::can('update', 'User', $user) ) {
          $user->username = 'someuser@test.com';
          $user->save();
      } else {
          // what happens if the user's trying to do something they're not
          // allowed to do?
          throw new Exception("What do you think you're doing?!");
      }
      

      在这种情况下,授权实例以$self 的形式传递到闭包中,然后检索当前用户 ID 并与正在编辑的用户 ($user) 进行核对。如果用户尝试编辑自己以外的其他人,则检查失败。

      这是一个非常基本的概述 - 希望它有所帮助。

      【讨论】:

      • 感谢您的详细解释。绝对有帮助。在我的应用程序中,会有很多规则,将它们放在配置文件中感觉很奇怪。它会很长....
      【解决方案3】:

      所以看起来权威 l4 只是一个外观插件。实际的包本身位于此处:https://github.com/machuga/authority

      这里的文档要详尽得多。这应该在 l4 包中指定。

      【讨论】:

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