bfg/permission

创建和监控 Laravel gates 规则的能力

安装: 24

依赖: 0

建议者: 0

安全: 0

星标: 0

关注者: 2

分支: 1

开放问题: 0

类型:bfg-app

0.0.4 2021-12-27 22:02 UTC

This package is auto-updated.

Last update: 2024-08-28 04:10:31 UTC


README

安装

  1. 作为依赖项安装
composer require bfg/permission
  1. Permission 特性设置环境
<?php

namespace App\Models;

use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Notifications\Notifiable;
use App\Models\Traits\User\UserHasRole;
use Illuminate\Database\Eloquent\Factories\HasFactory;
use Bfg\Permission\Traits\Permissions;

/**
 * User Class
 * @package App\Models
 */
class User extends Authenticatable
{
    use Notifiable, 
        UserHasRole, 
        HasFactory, 
        Permissions; // Like this
    
    // ...
}
  1. 安装资源和表格
php artisan install bfg/permission

关于概念。

能够创建和监控 Laravel gates 规则,通过角色分布控制,并能够方便地控制。还包括用户角色模型和一系列预定义的角色,例如:RootAdministratorModeratorUserGuest

描述

该软件包具有角色层次结构,并可以使用 Laravel gates 系统在它们之间分配访问权限。门仓只是一个位于 "Storage" 文件夹中的 "PHP" 文件,其中包含一个数组。

在哪里可以使用它?

每次您想要通过门来使用 "Laravel" 授权控制系统,但又不想在控制所有门和禁用或切换用户角色时手动创建一堆规则或文件时。

发布

发布配置

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

发布迁移

php artisan vendor:publish --tag=permission-migrations

命令

用于管理和在角色之间分配访问权限的命令。

权限列表

显示门规则的全列表。

Usage:
  permissions [<find>]

Arguments:
  find                  Find word

但是,规则可能太多,此时可以通过搜索使用,例如在命令后指定搜索词

php artisan permissions message

输出

+---------------------+--------+---------------+-----------+------+-------+
| Name                | Global | Administrator | Moderator | User | Guest |
+---------------------+--------+---------------+-----------+------+-------+
| viewAny-message     | Yes    | No            | Yes       | Yes  | Yes   |
| view-message        | Yes    | No            | Yes       | Yes  | Yes   |
| create-message      | Yes    | No            | Yes       | Yes  | Yes   |
| update-message      | Yes    | No            | Yes       | Yes  | Yes   |
| delete-message      | Yes    | No            | Yes       | Yes  | Yes   |
| restore-message     | Yes    | No            | Yes       | Yes  | Yes   |
| forceDelete-message | Yes    | No            | Yes       | Yes  | Yes   |
+---------------------+--------+---------------+-----------+------+-------+

允许或添加权限

要立即添加具有开放访问权限或开放访问规则,必须使用此命令。

Usage:
  allow [options] [--] <name> [<role_or_user_id>]

Arguments:
  name                  The name of permission
  role_or_user_id       Role slug or user id in system

Options:
  -r, --resource        Resource permission

如果您将规则作为资源创建

php artisan allow message -r

您将创建7个名为您指定的规则,即:viewAny-messageview-messagecreate-messageupdate-messagedelete-messagerestore-messageforceDelete-message

为了管理角色或用户的访问权限,您可以添加以下参数来调用用户ID或角色名称

php artisan allow message guest -r

为访客打开所有通信资源的访问权限。

禁止或添加权限

要立即添加具有封闭访问权限或关闭访问权限的规则,必须使用此命令。

Usage:
  disallow [options] [--] <name> [<role_or_user_id>]

Arguments:
  name                  The name of permission
  role_or_user_id       Role slug or user id in system

Options:
  -r, --resource        Resource permission

团队的所有逻辑与开启团队相同。

php artisan disallow message guest -r

删除权限

从一般列表中删除门规则。

Usage:
  permission:delete [options] [--] <name>

Arguments:
  name                  The name of permission

Options:
  -r, --resource        Make resource permission
php artisan permission:delete view-message

您可以使用资源标志删除一条规则或立即删除其所有资源

php artisan permission:delete message -r

如何使用?

您创建的所有规则都会自动落入 "Laravel" 门的系统中,并可以在其中使用,就像您以前使用 Laravel gates 系统一样。

<?php

namespace App\Http\Controllers;

use App\Models\Message;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Gate;

class MessageController extends Controller
{
    /**
     * Update the given message.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \App\Models\Message  $message
     * @return \Illuminate\Http\Response
     */
    public function update(Request $request, Message $message)
    {
        if (! Gate::allows('update-message', $message)) {
            abort(403);
        }

        // Update the message...
    }
}
if (Gate::forUser($user)->allows('update-message', $message)) {
    // The user can update the message...
}

if (Gate::forUser($user)->denies('update-message', $message)) {
    // The user can't update the message...
}
if (Gate::any(['update-post', 'delete-message'], $message)) {
    // The user can update or delete the message...
}

if (Gate::none(['update-post', 'delete-message'], $message)) {
    // The user can't update or delete the message...
}
Gate::authorize('update-message', $message);

重要!如果您将检索到的门模型作为参数传递,则规则将检查 user_idid 用户友好的门字段。这些字段在 user_eq_fieldmodel_eq_field 设置中配置。或者,您可以在其中添加 gateCheck(string $rule, Model $user, Model $model) 方法以编写类验证规则。