Laravel Roles&权限的权限

时间:2014-07-23 19:47:22

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

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

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

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

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

非常感谢任何帮助。搜索了互联网,但没有找到这个包。

3 个答案:

答案 0 :(得分:2)

我没有使用过权威,虽然我正在考虑一个项目。根据我对文档的阅读,以下是它的工作方式:

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

配置文件用于告诉包如何工作。因此,例如,配置文件允许您为一个或多个权限设置别名 - 如果您使用别名,则需要预先完成,以便程序包以您期望的方式工作。作为另一个例子,规则(更晚些时候)可以(并且应该)在配置中设置。

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

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. 接下来检查当前用户。如果他们是管理员,则会获得manage资源的all权限。

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

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

    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?!");
    }
    

    在这种情况下,Authority实例将作为$self传递到闭包中,然后检索当前用户ID并针对正在编辑的用户($user)进行检查。如果用户正在尝试编辑自己以外的人,则检查失败。

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

答案 1 :(得分:1)

Laravel中有很多包用于实现角色和权限,但我发现spatie/laravel-permission是最好的。

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

答案 2 :(得分:0)

所以看来权威l4只是一个Facade插件。实际的包本身就在这里:https://github.com/machuga/authority

这里的文档更全面。这应该在l4包上指定。