硅化铁/勃兰登堡

Laravel 认证包

1.5.2 2020-10-04 09:50 UTC

README

Laravel 授权包

Latest Version on Packagist Build Status

一个具有意见的授权包,旨在与标准 Laravel Gates 紧密集成。它与其他授权包不同,因为它使用在 gate 策略中硬编码的权限,而不是在数据库中重复它们。

简单来说;此包为用户提供了角色,这些角色被授权访问权限(Laravel Gates)。

包维护

不幸的是,我不再积极参与 Laravel 生态系统的工作,因此无法维护此包。如果您想接管此包的维护工作,请与我联系(打开问题或通过 Twitter 联系我)。

版本兼容性

安装

composer require silvanite/brandenburg

此包在 Laravel 5.5 中使用自动加载,包括服务提供者和 BrandenburgPolicy Facade。

对于 Laravel 5.1 - 5.4,请加载服务提供者和 Facade。

// config/app.php
'providers' => [
    ...
    Silvanite\Brandenburg\Providers\BrandenburgServiceProvider::class,
];

'aliases' => [
    ...
    'BrandenburgPolicy' => Silvanite\Brandenburg\Facades\PolicyFacade::class,
],

要启用用户角色,需要三个额外的表。当您运行迁移时,它们将自动安装。有关创建的表详情,请参阅此存储库源代码中的迁移。

php artisan migrate

如果您不打算使用勃兰登堡的默认迁移,您应该在配置文件中更改 ignoreMigrations 选项。您可以使用以下方式导出默认迁移:

php artisan vendor:publish --tag=brandenburg-config

用法

此包提供两个特质。主特质旨在用于您的用户模型,它启用了模型关系。

use Silvanite\Brandenburg\Traits\HasRoles;

class User
{
    use HasRoles;
    ...
}

第二个特质 ValidatesPermissions 可选地用于您的 AuthServiceProvider 中编写 Gates。它可用于阻止用户被锁定或使某些权限可选,允许访问没有系统用户被授予访问权限的权限。

// AuthServiceProvider.php

if ($this->nobodyHasAccess('create-articles')) {
    return true;
};

// Check if the user has access
...

创建角色

使用 Silvanite\Brandenburg\Role 模型创建和管理用户角色。

$editor = Silvanite\Brandenburg\Role::create([
    'name' => 'Editor',
    'slug' => 'editor',
]);

创建权限

应用程序中定义的所有 Gates 将自动作为权限可用,无需在数据库中特别创建这些权限。有关更多信息,请参阅 Laravel Gates 文档

管理角色和权限

所有权限都是通过提供由您的 Gate 定义的密钥进行分配的。它们可以被授予和撤销。

// Grant access
$editor->grant('create-articles');

// Revoke access
$editor->revoke('create-articles');

一些附加的辅助方法提供了管理权限的便捷方式。

// Grant access to a set of permissions and remove all other permissions
$editor->setPermissions([
    'create-articles',
    'read-articles',
    'update-articles',
    'delete-articles',
]);

// Revoke all permissions
$editor->revokeAll();

您可以通过访问 permissions 属性来查看特定角色具有哪些权限。

$editorPermissions = $editor->permissions;

// returns ['create-articles', 'read-articles', 'update-articles', 'delete-articles']

分配/移除角色

可以通过用户模型直接分配/移除角色(前提是使用了 HasRoles 特质)。您可以选择传递 Role 模型或角色的 slug。

// Using slug
$user->assignRole('editor');
$user->removeRole('editor');

// Using model
use Silvanite\Brandenburg\Role;

$user->assignRole(Role::first());
$user->removeRole(Role::first());

还有一个辅助方法来同步角色(或者您也可以直接使用 Eloquent 关系)。

$user->setRolesById([1, 3, 4]);

// Same as
$user->roles()->sync([1, 3, 4]);

验证访问权限

在您的 Gate 定义中,您可以验证给定用户是否具有访问特定权限,这将基于用户的角色。

$canCreateArticle = $user->hasRoleWithPermission('create-articles');

在 Gate 定义之外,您应该使用标准的 Laravel Gate 方法和方法辅助程序来检查用户是否具有访问权限。有关更多详细信息,请参阅 Laravel 文档

贡献

  1. 分叉它!
  2. 创建您的功能分支: git checkout -b my-new-feature
  3. 提交您的更改: git commit -am '添加一些功能'
  4. 运行测试: ./vendor/bin/phpunit
  5. 推送到分支: git push origin my-new-feature
  6. 提交拉取请求

支持

如果您需要任何支持,请通过 Twitter 联系我或在本次仓库中开启一个 issue。

许可证

GPL