fxmonster/brandenburg

Laravel 认证包

1.5.2 2023-11-22 18:38 UTC

This package is auto-updated.

Last update: 2024-09-23 09:27:43 UTC


README

Laravel 授权包

Latest Version on Packagist Build Status

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

简而言之;此包为用户提供角色,这些角色可以授予访问权限(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

如果您不打算使用 Brandenburg 的默认迁移,应在配置文件中更改 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 联系我或在此次仓库中创建一个 issues。

许可证

GPL