myclabs / acl
Doctrine 的 ACL 库
1.2
2014-08-20 12:09 UTC
Requires
- php: >=5.4.0
- doctrine/orm: 2.5.*@dev
This package is not auto-updated.
Last update: 2024-09-10 02:12:41 UTC
README
MyCLabs ACL 是一个帮助管理模型权限的库。
它与其他 ACL 库不同,因为它专注于控制对模型类(Doctrine 实体)的访问。因此,访问控制模型遵循您的实际模型,这使得实现访问层叠变得容易(例如,如果您可以访问一个类别,您也可以访问它包含的所有子类别)。
它也尽可能地进行了优化:授权存储在数据库中,以便通过 Doctrine 查询在 SQL 层面上进行非常高效的过滤(您只能加载用户可以访问的对象)。我们所知道的没有其他 ACL 系统能够做到这一点。
要求
- PHP 5.4
- 使用 Doctrine 作为您模型的 ORM
- Doctrine 2.5(目前处于测试阶段)
词汇表
- 安全身份:将被授予某些访问权限的实体(这通常是用户)
- 资源:我们想要控制其访问的“事物”
- 授权:允许安全身份(用户)在资源上执行某些操作
- 角色:角色为用户提供授权(例如,管理员、文章编辑、项目所有者等)
有两种类型的资源
- 一个实体(例如:文章 #123)
- 给定类型的所有实体(例如:所有文章),这由实体的类名表示
概述
我们不喜欢迷失和困惑,因此您需要做的所有 ACL 相关操作都在 ACL 服务上完成。您可以首先创建它
// full configuration shown in the documentation $acl = new ACL($entityManager);
通过添加角色向用户授予权限
$acl->grant($user, new ArticleEditorRole($user, $article));
角色是您编写的类,它定义了用户对资源的权限。
通过删除角色从用户那里移除权限
$acl->revoke($user, $role);
测试权限
$acl->isAllowed($user, Actions::EDIT, $article);
您还可以过滤查询,仅获取用户可以访问的实体
$qb = $entityManager->createQueryBuilder(); $qb->select('article')->from('Model\Article', 'article'); ACLQueryHelper::joinACL($qb, $user, Actions::EDIT); // This query will return only the articles the user can edit $articles = $qb->getQuery()->getResult();
特性
- 存储在数据库中(您不需要自己处理持久化)
- 非常优化
- 在数据库级别过滤查询(您不会加载用户无法访问的实体)
- 只连接一个额外的表
- 绕过 Doctrine 的 ORM 将授权插入数据库(快速高效)
- 在数据库级别进行级联删除
- 授权级联/继承
- 授权可重建:您可以在之后更改“ArticleEditor”可以做什么,然后只需重建 ACL
- 支持在标准操作(如“查看”、“编辑”、“删除”等)之上进行自定义操作
限制
- 由于 Doctrine 的限制,您需要在授予或测试授权之前刷新您的资源
- 由数据库支持:测试
isAllowed
意味着一次数据库调用