railken/amethyst-permission

v0.3.1 2024-04-05 11:00 UTC

README

Action Status

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 时,权限将自动重新加载。

效果

效果可以是 acceptdeny。如果没有任何权限,任何用户都被拒绝执行任何操作。如果您添加了权限接受和拒绝,它们都将生效。

例如,您可以设置“用户可以看到所有评论”和“用户不能看到这条评论”。最后,用户可以看到所有评论,除了您定义的那条。

类型

您的权限类型表示将使用哪个类来解析您的请求。

它可以是 dataroute,但您可以在 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'
]);

所有操作的列表: 查询、创建、更新、删除