kusebauch/nette-security-annotation

此包已废弃,不再维护。未建议替代包。

通过注解为演示者动作、信号和组件提供Acl安全

2.3.1 2017-01-06 22:10 UTC

This package is not auto-updated.

Last update: 2020-11-16 11:17:48 UTC


README

Build Status codecov.ioLatest Stable VersionLicense

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”。

高级用法

根据此库,有一些高级用法的考虑事项。

覆盖演示者方法

这个库覆盖了createComponentcheckRequirements演示者方法的默认行为。因此,如果要在自己的代码中覆盖这些方法,需要特别注意,尤其是如果您使用这个库的“特质”版本。

对于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
     }
 }