2014-07-23 90 views
1

从我的研究中,我发现Authority包(https://github.com/machuga/authority-l4)最适合实现基于角色/权限的用户认证系统,同时保持灵活性。我无法准确理解如何使用此软件包。文档涵盖了它的功能和配置,但没有解释一些事情。希望有人能指引我朝正确的方向发展。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. 设立了几个别名 - “因为我们是懒惰和Don”不想一一指定createread等的规则。我们可以用manage代替。

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

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

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

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

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

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

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

此规则包括一个检查,允许用户管理自己的用户记录,但没有其他人。要做到这一点,你需要调整上面的例子。

if(Authority::can('update', 'User', $user)) { 
    $user->username = '[email protected]'; 
    $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)。如果用户试图编辑除自己以外的人,则检查失败。

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

+0

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

1

有这么多的包建在Laravel执行角色和权限,但我发现spatie/laravel-permission是最好的。

我发现从User role and permission in Laravel

+0

实际上这是最新的软件包。 –