bubobox / guard
基于REST资源构建的细粒度权限检查库
Requires
- php: ^5.4
Requires (Dev)
- phpunit/phpunit: 4.7.*
This package is not auto-updated.
Last update: 2024-10-02 11:23:31 UTC
README
基于REST资源构建的细粒度权限检查库。
安装
composer require bubobox/guard
开发
单元测试和代码质量检查都集成到composer的test
脚本中,请在检查任何内容之前运行以下命令,CircleCI将会运行相同的测试来检查您的代码。
composer test
使用方法
有两种方式可以使用这个库。要么使用一个Guard
实例,要么通过在类上实现LockInterface
将您的类(例如,您当前活动用户使用的类)转换为锁。
Guard
可以使用保护对象来设置和检查资源上的规则。
可以通过使用new
关键字调用构造函数或使用类的静态make
方法来创建Guard
选项。两种方法都接受一个可选参数。这个可选参数是与这个Guard
实例关联的调用者(用户的泛称、apikey等)。调用者必须实现CallerInterface
接口。到目前为止,调用者仅用于传递到您的断言方法。
allow($action = '*', $resource = '*', $property = '*', callable $assertion = null)
deny($action = '*', $resource = '*', $property = '*')
can($action, $resource = null, $property = null)
允许级联,所以调用allow('read')
会告诉Guard,在所有资源及其属性上允许执行read
操作。当
否认只有在已经允许某些内容的情况下才有用。比如说,您调用了allow('read')
然后调用deny('read', 'foo')
。现在Guard将允许在除了foo
之外的所有资源上执行read
操作。它们也可以级联,当您拒绝一个操作的访问时,它将影响所有资源。否认总是覆盖允许,一旦您否认了某些内容,之后再次允许它就不再重要。
您可以通过向allow
调用添加一个断言可调用来添加自己的自定义检查。有关更多信息,请参阅断言。
can
将根据Guard中定义的规则返回true或false。
锁
通过向任何类添加LockTrait
,它将完全符合LockInterface
,您也可以自己实现而不是使用LockTrait
,但在大多数情况下这样做是没有意义的。通过在您的类上实现LockInterface
,它们将暴露与上面解释的Guard
相同的三个方法,以及一个额外的setGuard
函数。需要调用一次setGuard
函数来为您的LockInterface
实例提供一个Guard
以在后台使用,如果不这样做,将会抛出NoGuardException
。
复杂资源
除了使用字符串作为资源外,您的资源也可以是实现了ResourceInterface
接口的类的实例。
断言
断言是一种被调用的方法,用于向守卫添加额外的检查。它可以是任何 可调用对象
,并且会按照以下顺序传递这些参数:caller
(null 的 CallerInterface)、action
(字符串)、resource
(ResourceInterface、字符串或 null)以及 property
(字符串或 null)。Caller 将是关联到 Guard
实例的 CallerInterface,而 action、resource 和 property 将是原本传递给 can
方法的值。