railken / amethyst-permission
Requires
- php: >=8.2
- amethyst/core: 0.3.*
- amethyst/owner: 0.3.*
- nicoswd/php-rule-parser: ^0.7.1
- railken/template: ^1.1
Requires (Dev)
- amethyst/foo: 0.3.*
- amethyst/user: 0.3.*
- friendsofphp/php-cs-fixer: ^3.52
- orchestra/testbench: *
- phpunit/phpunit: *
README
Amethyst 包。
使用广泛的定制来定义您的数据和路由的权限。
要求
PHP 7.2 及以上版本。
待办事项
- 属性授权
安装
您可以通过以下命令使用 Composer 安装它:
composer require amethyst/permission
该包将自动注册自己。
用法
简单用法如下:
use Amethyst\Models\Permission; use Symfony\Component\Yaml\Yaml; Permission::create([ 'effect' => 'accept', 'type' => 'data', 'payload' => Yaml::dump([ 'action' => 'create', 'data' => 'foo' ]), 'agent' => '{{ agent.id }} == 1', ]);
每当为 Permission
模型触发 eloquent.saved
时,权限将自动重新加载。
效果
效果可以是 accept
或 deny
。如果没有任何权限,任何用户都被拒绝执行任何操作。如果您添加了权限接受和拒绝,它们都将生效。
例如,您可以设置“用户可以看到所有评论”和“用户不能看到这条评论”。最后,用户可以看到所有评论,除了您定义的那条。
类型
您的权限类型表示将使用哪个类来解析您的请求。
它可以是 data
或 route
,但您可以在 amethyst.permissions.permission
中扩展它。
代理
通过 facade Illuminate\Support\Facades\Auth
和方法 user()
获取代理。
当此字段为 null 时,表示它适用于所有代理。
代理必须返回一个布尔值条件。
如果您想查看语法,请参阅 nicoSWD/php-rule-parser。
在逻辑解析器解析之前,先进行twig解析器。传入的唯一变量是代理,它是您的 App\Models\User
。然后您可以使用任何逻辑来获取您想要的信息。例如,您可以根据任何属性和任何关系(例如组)进行过滤:{{ agent.groups.contains('myGroupName') ? 1 : 0 }} === 1
有效载荷
一个 YAML 有效载荷定义了您的权限的规范。例如,对于 route
权限,它可以是一个通配符 URL。
有效载荷 - 路由
- name: 您要使用的路由名称,您可以使用通配符
*
- url: 路由的 URL,与之前相同,您可以使用通配符
*
, - method: 路由方法
一些示例
为每个用户启用端点 /profile
。
use Amethyst\Models\Permission; use Symfony\Component\Yaml\Yaml; Permission::create([ 'type' => 'route', 'payload' => Yaml::dump([ 'url' => '/profile' ]) ]);
您也可以使用数组
use Amethyst\Models\Permission; use Symfony\Component\Yaml\Yaml; Permission::create([ 'type' => 'route', 'payload' => Yaml::dump([ 'url' => [ '/profile', '/recovery-password' ], 'method' => [ 'POST', 'GET' ] ]) ]);
为用户 ID 2 启用端点 foo.*(foo.index、foo.create、foo.show、foo.update、foo.delete)
use Amethyst\Models\Permission; use Symfony\Component\Yaml\Yaml; Permission::create([ 'type' => 'route', 'payload' => Yaml::dump([ 'url' => 'foo.*' ]), 'agent' => '{{ agent.id }} === 2' ]);
有效载荷 - 数据
以下示例将允许用户#2 只查看名称中包含 foo
的名为 post
的数据。
use Amethyst\Models\Permission; use Symfony\Component\Yaml\Yaml; Permission::create([ 'type' => 'data', 'payload' => Yaml::dump([ 'name' => [ 'post' ], 'action' => [ 'query', ], 'filter' => [ 'name ct "foo"' ] ]), 'agent' => '{{ agent.id }} === 2' ]);
所有操作的列表: 查询、创建、更新、删除