kusebauch / nette-security-annotation
通过注解为演示者动作、信号和组件提供Acl安全
Requires
- latte/latte: *
- nette/application: 2.3.*
Requires (Dev)
This package is not auto-updated.
Last update: 2020-11-16 11:17:48 UTC
README
nette-security-annotation
Nette中的注解安全
允许通过在演示者“action”和“handle”方法上使用注解来保护演示者。还可以将演示者组件绑定到特定操作,并以相同的方式保护组件的创建。
安装
最简单的方式是通过composer安装。只需运行:composer require kusebauch/nette-security-annotation
可选地,您可以仅下载源代码,并按需包含文件。
基本用法
要启用安全功能,只需将@Secured
注解添加到方法中。(action*
、handle*
、render*
或createComponent*
)可选地,您可以将注解添加到类中,它将级联到类中的所有方法。
资源
截至现在,每个方法都可以与一个资源相关联,该资源由@Resource
注解以字符串值定义。类级别定义的资源将被方法级别定义的资源覆盖。
权限
每个方法都可以与无限数量的权限相关联。它们由@Privilege
注解定义。值可以是字符串或字符串数组。类级别定义的权限将与方法级别定义的权限合并。权限不是严格的 - 您至少需要有一个权限才能访问方法,而不是全部。
操作
特定于createComponent*
方法的注解。可以将此组件工厂与特定的演示者操作相关联。它由@Action
注解定义,规则与权限注解相同。
违规行为
如果在action*
、handle*
或render*
方法中发生权限违规,将抛出ForbiddenRequestException
。如果用户未登录,也会抛出相同的异常。如果方法有@Secured
注解,但没有与其相关联的@Resource
注解,将抛出InvalidStateException
。此外,如果您尝试以错误的方法访问组件,将抛出ForbiddenRequestException
。
示例
有关用法示例,请参阅“tests/_support”。
高级用法
根据此库,有一些高级用法的考虑事项。
覆盖演示者方法
这个库覆盖了createComponent
和checkRequirements
演示者方法的默认行为。因此,如果要在自己的代码中覆盖这些方法,需要特别注意,尤其是如果您使用这个库的“特质”版本。
对于createComponent
方法,库会调用checkRequirements
方法并检查@Action
注解。
对于checkRequirements
方法,库会解析注解并为每一对@Resource
和@Privilege
调用"$presenter->getUser()->isAllowed($resource, $privilege)",直到找到第一个允许(如果有的话)的对。
覆盖默认行为
如果发生权限违规,您可能希望有不同的行为。在这种情况下,您可以“覆盖演示者方法”(见上文)。在这种情况下,您可能需要这样的代码
<?php public function checkRequirements($element) { try { parent::checkRequirements($element) } catch(ForbiddenRequestException $e) { //You own exception processing } }