硅化铁 / 勃兰登堡
Laravel 认证包
Requires
- php: >=7.3
- laravel/framework: ^8.0
Requires (Dev)
- mockery/mockery: ^1.3.1
- orchestra/testbench: ^6.0
- phpunit/phpunit: ^9.0
- squizlabs/php_codesniffer: ^3.5
README
Laravel 授权包
一个具有意见的授权包,旨在与标准 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 文档。
贡献
- 分叉它!
- 创建您的功能分支:
git checkout -b my-new-feature
- 提交您的更改:
git commit -am '添加一些功能'
- 运行测试:
./vendor/bin/phpunit
- 推送到分支:
git push origin my-new-feature
- 提交拉取请求
支持
如果您需要任何支持,请通过 Twitter 联系我或在本次仓库中开启一个 issue。
许可证
GPL