a5sys/acl-doctrine-filter-bundle

安装次数: 1,464

依赖者: 0

建议者: 0

安全: 0

星标: 0

关注者: 4

分支: 1

公开问题: 0

类型:symfony-bundle

2.0.0 2022-02-08 10:32 UTC

This package is auto-updated.

Last update: 2024-09-08 16:09:23 UTC


README

已弃用,推荐使用 https://www.doctrine-project.org/projects/doctrine-orm/en/2.8/reference/filters.html

AclDoctrineFilterBundle

此包允许自动过滤 doctrine 实体

安装

Composer

composer require "a5sys/acl-doctrine-filter-bundle"

激活包

在 AppKernel 中添加包

new A5sys\AclDoctrineFilterBundle\AclDoctrineFilterBundle(),

配置

将 doctrine 过滤器配置添加到 config.yml

doctrine:
    orm:
        filters:
            acl:
                class: 'A5sys\AclDoctrineFilterBundle\Filter\AclFilter'
                enabled: true

您还可以禁用某些角色的 ACL

acl_doctrine_filter:
	    no_acl_roles:
	        - "ROLE_ADMIN" #mandatory list of user roles that does not have acl

用法

假设您有 3 个实体

  • 用户
  • UserProject(用户和项目之间的链接,它是我们所使用的 acl)
  • 项目

在您的代码中,如果您执行

	$projectRepository->findAll();

您将获取没有任何 ACL 的所有项目

修改 Project.php 实体,添加 AclAnnotation

namespace AppBundle\Entity;

** use A5sys\AclDoctrineFilterBundle\Annotation\AclAnnotation;** use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Table(name="project")
 * @ORM\Entity
 * @AclAnnotation(aclSql="##TABLEALIAS##.id in (select distinct project.id from project inner join user_project ON user_project.project_id = project.id where user_project.user_id = ##USERID##)")
 */
class Project
{
....

然后,注解的 SQL 将自动附加到所有 SQL 查询中,并且永远不会检索到被禁止的实体。

对于所有您想要使用 ACL 保护的实体,您都做同样的事情。

保留关键字

##TABLEALIAS##

此关键字将被 DQL 生成的表别名自动替换

##USERID##

此关键字将被登录用户的 id 自动替换