CakePHP 访问控制列表:使用指南
如果您正在构建 CMS,您可能需要具有不同权限级别的不同用户角色(超级用户、管理员、用户)。代码太复杂?输入 CakePHP 的 ACL(访问控制列表)。通过正确的设置,您只需一行即可检查用户权限。
简介:什么是访问控制列表?
ACL 允许您创建具有各自角色的用户层次结构。这是一个简单的示例。
- 超级用户
- 用户 #1
- 管理员
- 用户#2
- 用户#3
- 用户
- 用户#4
- 用户#5
- 用户#6
- ...
在本教程中,我们将为一个简单的博客设置 ACL。如果您尚未在 Nettuts+ 上查看 CakePHP 入门(和第 2 部分),请查看后返回,因为我们将理所当然地认为框架基础知识。
通过这个层次结构,我们可以为每个角色分配多个权限:
- 超级用户可以创建、阅读、更新和删除帖子和用户。
- 管理员可以创建、阅读、更新和删除帖子。
- 用户可以创建和阅读帖子。
- 其他人都可以阅读帖子。
每个权限都会授予组,而不是用户;因此,如果用户 #6 晋升为管理员,系统将检查他的组权限——而不是他的权限。这些角色和子节点(用户)称为访问请求对象,或 ARO。
现在,在另一边,我们有了访问控制对象(ACO)。这些都是要控制的对象。上面我提到了帖子和用户。通常,这些对象与模型直接链接,因此如果我们有一个 Post 模型,我们将需要该模型的 ACO。
每个ACO都有四种基本权限:创建、读取、更新和删除。您可以使用关键字 CRUD 来记住它们。还有第五个权限,即星号,它是完全访问权限的快捷方式。
在本教程中,我们将仅使用两个 ACO:Post 和 User,但您可以根据需要创建任意多个 ACO。
ACL 表
让我们继续创建数据库表。您可以在应用程序的 config/sql
目录中的 db_acl.sql
中找到此代码。
CREATE TABLE acos ( id INTEGER(10) UNSIGNED NOT NULL AUTO_INCREMENT, parent_id INTEGER(10) DEFAULT NULL, model VARCHAR(255) DEFAULT '', foreign_key INTEGER(10) UNSIGNED DEFAULT NULL, alias VARCHAR(255) DEFAULT '', lft INTEGER(10) DEFAULT NULL, rght INTEGER(10) DEFAULT NULL, PRIMARY KEY (id) ); CREATE TABLE aros_acos ( id INTEGER(10) UNSIGNED NOT NULL AUTO_INCREMENT, aro_id INTEGER(10) UNSIGNED NOT NULL, aco_id INTEGER(10) UNSIGNED NOT NULL, _create CHAR(2) NOT NULL DEFAULT 0, _read CHAR(2) NOT NULL DEFAULT 0, _update CHAR(2) NOT NULL DEFAULT 0, _delete CHAR(2) NOT NULL DEFAULT 0, PRIMARY KEY(id) ); CREATE TABLE aros ( id INTEGER(10) UNSIGNED NOT NULL AUTO_INCREMENT, parent_id INTEGER(10) DEFAULT NULL, model VARCHAR(255) DEFAULT '', foreign_key INTEGER(10) UNSIGNED DEFAULT NULL, alias VARCHAR(255) DEFAULT '', lft INTEGER(10) DEFAULT NULL, rght INTEGER(10) DEFAULT NULL, PRIMARY KEY (id) ); 登录后复制