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()
获取。
当此字段为空时,表示它应用于所有代理。
代理必须返回条件为真或假。
如果您想查看语法,请参阅 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 只查看名为 post
且名称包含 foo
的数据
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' ]);
所有操作的列表:query, create, update, remove