sam-it / abac
基于属性的访问控制
v4.1.1
2022-11-02 16:09 UTC
Requires
- php: >= 8.1
- nikic/iter: ^2
Requires (Dev)
- captainhook/plugin-composer: ^5.3
- phpstan/extension-installer: ^1.1
- phpstan/phpstan: ^1.6
- phpstan/phpstan-phpunit: ^1.1
- phpstan/phpstan-strict-rules: ^1.2
- phpunit/phpunit: >= 9
- ramsey/conventional-commits: ^1.3
- symplify/easy-coding-standard: ^10.2
- vimeo/psalm: ^4.22
README
一个简单的框架,用于在您的应用程序中实现基于属性的访问控制(ABAC)。
规则
规则实现业务逻辑,规则执行的输入包括
- source: 行动者,通常是当前用户
- target: 主题,行动者希望作用的对象
- permission: 行动者希望采取的操作
- environment: 环境应包含业务规则可能需要的任何其他内容
鼓励规则进行递归访问检查。一个典型的规则可以是 WriteImpliesRead
,因为对于大多数系统,当你可以写入一个对象时,你通常也可以读取它。实现可能看起来像这样
public function execute( object $source, object $target, string $permission, Environment $environment, AccessChecker $accessChecker ): bool { return $permission === 'read' && $accessChecker->check($source, $target, 'write'); }
环境
考虑一个只在办公时间允许访问的规则。那么当前时间应该设置在环境中。这样做的原因是,只有一个环境位置可以方便地进行测试,并且可以保持单一的真实来源。
无限循环
规则可能包含无限循环,我们通过跟踪递归深度来检测这些循环。