1

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

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

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

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

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

4

3 回答 3

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. 设置几个别名 - '因为我们很懒,不想一个接一个地为 , 等指定create规则read。我们可以manage改用。

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

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

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

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::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)。如果用户尝试编辑自己以外的其他人,则检查失败。

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

于 2014-07-23T20:23:39.283 回答
1

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

我从Laravel 中的用户角色和权限中找到了解决方案

于 2017-09-09T06:39:45.313 回答
0

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

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

于 2014-07-23T20:07:50.973 回答