MichaelCooke/guardian

该软件包已被弃用,不再维护。未建议替代软件包。

一个简单的Laravel权限和角色包

v1.0.0 2018-03-15 00:08 UTC

README

Guardian是一个简单的Laravel权限和角色包,它提供了权限、角色以及易于配置的访问继承。

安装Guardian

通过Composer要求Guardian

安装非常简单;只需通过Composer要求Guardian将包拉入您的项目。

composer require michaelcooke/guardian

运行迁移

然后,通过Artisan运行Guardian的迁移。

php artisan migrate

配置App用户模型

最后,通过编辑config/auth.php中的users提供者配置数组来配置Laravel以使用Guardian的用户模型。

'providers' => [
    'users' => [
        'driver' => 'eloquent',
        'model' => MichaelCooke\Guardian\User::class,
    ],

扩展Guardian用户模型

您可以直接配置Laravel使用Guardian的用户模型,或者您可以在app/User.php中扩展Guardian的用户模型,以便在满足您应用特定需求的同时使用Guardian,并为您的用户模型添加自定义关系和属性。

<?php

namespace App;

use MichaelCooke\Guardian\User as GuardianUser;

class User extends GuardianUser
{
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password',
    ];

    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

    /**
     * Permissible models that access definitions are inherited from.
     *
     * @var array
     */
    protected $inheritsAccessFrom = [
        'roles',
    ];
}

使用Guardian

权限

权限可用于控制对应用程序中特定功能或功能的访问。它们通过一个键定义,以及一个相应的布尔值来控制是否应授权或阻止在所有情况下访问该权限键。

您可以自由地设置这些键,但建议在您的应用程序中使用粒度格式。例如,在您的应用程序的论坛部分中可能如下所示

forums.*
    forums.admin.*
        forums.admin.create
        forums.admin.edit
        forums.admin.delete
    forums.moderate.*
        forums.moderate.{forumId}.*
            forums.moderate.{forumId}.lock
            forums.moderate.{forumId}.move
            forums.moderate.{forumId}.pin
    forums.general.*
        forums.general.{forumId}.*
            forums.general.{forumId}.create
            forums.general.{forumId}.edit
            forums.general.{forumId}.delete
            forums.general.{forumId}.reply

访问

要检查用户或角色是否可以访问特定的权限键,只需使用具有权限值的hasPermission()调用。它将返回一个基于是否授权的布尔值。

if ($user->hasAccess('blog.post')) {
    // User has access
}

访问由模型继承的直接分配的权限确定。如果一个模型的继承访问包含对正在评估的键的权限,并且模型或其继承访问上没有限制,则将授权访问。

在访问评估过程中,如果由于访问继承或其他原因在权限冲突中与受限权限发生冲突,则限制将始终优先,并阻止访问匹配的权限,无论是否直接分配给评估的模型。这对于“被禁用”的角色特别有用,用户应被禁止访问您的应用程序的特定部分,尽管可能分配了其他权限。

访问继承

默认情况下,用户将从与其关联的任何角色继承所有权限;用户角色的所有权限将向下渗透并应用于用户。通过继承获得的权限与直接分配的权限没有不同的权重。

通配符

守卫器在权限评估中使用UNIX风格的glob模式匹配。这提供了几个通配符运算符,其中最相关的是匹配包括空字符在内的所有字符的*

有关glob模式匹配的更多信息可在维基百科上找到。

扩展守卫器

可授权模型和可授权特质

“可授权模型”简单来说就是使用守卫器中包含的Permissible特质的模型。它允许模型与权限相关联,并从其他可授权模型继承权限。

例如,用户将默认从其关联的角色继承权限。这是因为用户和角色模型都使用了Permissible特质,并且用户模型被配置为从可能关联到用户的任何角色继承权限。

特定可授权模型的访问权限通过在模型中定义的$inheritsAccessFrom属性中的其他可授权模型继承。