alleyinteractive/simple-laravel-roles

此包已被废弃且不再维护。未建议替代包。

基于PHP的Laravel简单权限

0.1.2 2021-03-04 14:59 UTC

This package is auto-updated.

Last update: 2024-06-04 22:32:54 UTC


README

此包为Laravel应用程序添加了非常简单的角色/能力功能,角色和能力通过配置文件定义。

一旦定义了角色和能力并将角色分配给用户,就可以使用Laravel内置的授权功能来检查能力。

if ($user->can('edit_posts')) {
    // Cool.
}

安装

通过Composer

$ composer require alleyinteractive/simple-laravel-roles

设置和配置

  1. 安装此包后,您可以使用Artisan发布包文件。

    php artisan vendor:publish --provider="Alley\SimpleRoles\SimpleRolesServiceProvider"

    这将向您的应用程序添加两个文件

    • config/roles.php 是您定义角色的位置。
    • database/migrations/<date>_add_roles_to_users_table.phpusers 表添加一个 roles 列。如果此文件不适用于您的用例,请删除此文件。
  2. config/roles.php 中配置您的角色和能力。

  3. 运行 php artisan migrate 以将 roles 添加到 users 表。如果您想将 roles 添加到更多表,请先创建您的迁移。

  4. Alley\SimpleRoles\HasRoles 特性添加到 User 模型以及任何具有角色的模型。

用法

在门和策略中

此包旨在通过添加用户或其他模型的角色和能力桶来增强Laravel内置的授权功能。这些桶可以在您的门或策略检查期间进行检查。

以下是一个利用能力允许删除帖子(如果用户拥有该帖子或用户被允许删除其他用户的帖子)的示例策略方法

use App\Models\Post;
use App\Models\User;
use Illuminate\Auth\Access\Response;

/**
 * Determine if the given post can be deleted by the user.
 *
 * @param  \App\Models\User  $user
 * @param  \App\Models\Post  $post
 * @return \Illuminate\Auth\Access\Response
 */
public function delete(User $user, Post $post)
{
    return $user->id === $post->user_id || $user->can('delete_others_posts')
        ? Response::allow()
        : Response::deny('You do not own this post.');
}

替代门和策略

根据应用程序的复杂性,此包甚至可以替换门和策略检查。它将 拦截所有门检查,在执行其他授权检查之前,如果用户在其任一角色的能力中具有给定的能力,则检查将通过。这样,Laravel的核心授权功能将按正常工作,并将检查能力而不是定义门或策略。换句话说,如果用户具有具有 delete_posts 能力的角色,则可以使用以下方式检查该能力:

if ($user->can('delete_posts')) { /* ... */ }

以及在Blade模板中

@can('delete_posts')
  // ...
@endcan

HasRoles 特性还包括一些用于检查能力和角色的辅助函数

  • hasCapability(string $capability): bool:检查对象是否具有给定能力。
  • hasRole(string $role): bool:检查对象是否具有给定角色。
  • getRoles(): Collection:获取对象的Role对象作为角色。
  • setRoles(array $roles): bool:设置对象的角色。
  • addRole(string $role): bool:向对象添加角色。
  • removeRole(string $role): bool:从对象中删除角色。

此外,该包提供了一个 Role 类,可用于检查特定角色的能力。

$contributor = new Role('contributor');
if ($contributor->can('create_posts')) { /* ... */ }

变更日志

请参阅 变更日志

测试

$ composer test

贡献

请参阅 contributing.md 以获取详细信息和工作清单。

安全

如果您发现任何安全相关的问题,请通过作者的电子邮件(在 composer.json 中找到)联系作者,而不是使用问题跟踪器。

致谢

  • [Matthew Boynes][@mboynes]

许可证

MIT。更多信息请参阅许可证文件