bubobox/guard

基于REST资源构建的细粒度权限检查库

0.1.0 2015-08-08 17:42 UTC

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 方法的值。