kinulab / efficient-vote-bundle
提供增强选民安全性能的系统
0.2.1
2018-02-27 07:02 UTC
Requires
- symfony/config: ^3.0||^4.0
- symfony/dependency-injection: ^3.0||^4.0
- symfony/security-bundle: ^3.0||^4.0
Requires (Dev)
- symfony/phpunit-bridge: ^3.0||^4.0
This package is auto-updated.
Last update: 2024-09-26 11:51:31 UTC
README
使用 Symfony,您可以通过访问控制列表(ACL)或通过投票者来安装访问管理。ACL 难以实现,而投票者存在性能问题。此包提供了一种在不影响性能的情况下享受投票者简单性的方法。
背景
投票者的性能问题来自 AccessDecisionManager
服务。其角色是要求每个投票者知道当前用户是否被允许执行特定操作(例如 ROLE_SUPER_ADMIN
)。问题是该服务不知道大多数投票者将放弃支持,因为它们不支持该属性。
因此,如果您的应用程序有 10 个投票者,并且您的模板使用了 10 次的 is_granted()
函数,它将进行 100 次调用。如果您的应用程序增长,这将成为瓶颈。
为了解决这个问题,此包覆盖了默认的 AccessDecisionManager
服务。使用新的服务,您可以注册您的投票者并指定支持的属性。访问决策管理器将不会调用您的投票者,除非他具备该属性的资格。
安装
composer require kinulab/efficient-vote-bundle
然后在您的 app/config/AppKernel.php
中添加
public function registerBundles() { $bundles = [ // [...] new Kinulab\EfficientVoteBundle\KinulabEfficientVoteBundle(), ];
用法
新的访问决策管理器将假设您根据类型和领域组织您的投票者。
然后您必须使用以下形式命名您的角色
ROLE _ HOUSE _ OPEN_DOOR
|__| |___| |_______|
type domain attribute
您的投票者类保持与标准的 Symfony 投票者完全一样。唯一的不同之处在于投票者服务的注册。
使用标准投票者,您的服务注册如下
# app/config/services.yml services: app.host_voter: class: AppBundle\Security\hostVoter # small performance boost public: false tags: - { name: security.voter }
使用此包,您现在应将服务注册如下
# app/config/services.yml services: app.host_voter: class: AppBundle\Security\hostVoter # small performance boost public: false tags: # big performance boost - { name: security.efficient_voter, type: ROLE, domain: HOUSE }
使用此配置,上述投票者将仅针对 ROLE_HOUSE_*
属性调用。
注意
新的访问决策管理器仍然与原始版本兼容。因此,如果您有一些以旧方式注册的投票者,它们仍然会按预期工作(但会频繁调用)。