CakePHP 访问控制列表:使用指南

2023年 8月 27日 59.9k 0

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)
);

登录后复制

我们现在可以开始创建 ARO 和 ACO 节点,但是嘿,我们没有用户!我们必须创建一个基本的身份验证系统。

第 1 步:基本身份验证系统

由于本教程面向具有基本到中等框架知识的 CakePHP 开发人员,因此我将提供代码和简要说明。但是,身份验证系统不是本教程的目标。

MySQL 表:

CREATE TABLE users (
id INTEGER(10) UNSIGNED AUTO_INCREMENT KEY,
username TEXT,
password TEXT
);

登录后复制

用户模型 (models/user.php)

登录后复制

用户控制器 (controllers/users_controller.php)

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论