usongame/policy

此包的最新版本(dev-master)没有可用的许可证信息。

dev-master 2023-05-24 01:30 UTC

This package is auto-updated.

Last update: 2024-09-24 04:50:37 UTC


README

用于验证、解析Policy结构和语法

安装

composer require usongame/policy

使用方法

$policyData = [
	"Statement" => [
		[
			"Effect" => "Allow",
			"Action" => ["goods/*", "goods/list"],
		],
		[
			"Effect" => "Allow",
			"Action" => ["goods/*", "goods/list"],
		],
		[
			"Effect" => "Allow",
			"Action" => ["goods/*", "goods/list"],
		],
	],
];
$policy = new \hanwenbo\policy\Policy();
$policy->addPolicy( new \hanwenbo\policy\RequestBean\Policy( $policyData ) );
// 可以添加多组,目的:一个用户属于多个角色组的时候,或者一个角色组对应多个存储的policy的时候
$policy->addPolicy( new \hanwenbo\policy\RequestBean\Policy( $policyData ) );
$result = $policy->verify( 'goods/list' );
var_dump( $result );

思路说明

假设是一个FaShop的商城项目

权限应该分为3个表,一个组可以拥有多个策略。为了方便开发者,可以将每个模块的策略预置到数据库中,例如订单模块、商品模块。在给权限组分权限时,可以选择这些模块(策略)。当验证时,查询出所有策略,交给该库进行验证。

auth_group 角色组

auth_group_policy 角色组拥有的 policy_id 集合

auth_policy 权限策略表

策略表应包含id和存储JSON的字段,JSON格式如下:

{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "goods/*",
        "goods/list"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "goods/*",
        "goods/list"
      ]
    },
    {
      "Effect": "Allow",
      "Action": [
        "goods/*",
        "goods/list"
      ]
    }
  ]
}

待办事项

  • 根据规则生成的前端路由示例
  • 接口返回给前端的策略列表示例
  • 前端policy验证的库