gpt4 book ai didi

database - General/Phalcon - ACL 和数据库存储

转载 作者:太空狗 更新时间:2023-10-30 01:52:36 26 4
gpt4 key购买 nike

背景

我目前正在开发 Phalcon 应用程序。该应用程序本身相对简单,但我将其用作学习一些更高级概念和技术的工具。

我放弃了自制的 ACL(访问控制列表)解决方案,转而使用 Phalcon 中提供的 ACL。

这个问题更具概念性,因为我有信心实现任何解决方案。

问题

问题是这样的:“您将 ACL 上的信息存储在哪里?”

可能的解决方案

我目前有一个静态数组,其中填充了各种操作及其访问级别。

我觉得这有点受限,但可能会通过数据库存储得到更好的服务。

我可以使用位掩码来指示允许访问各种资源的用户角色,或者可能是最低级别。

我遇到的另一个问题是它是分层的(在一定程度上)但可能存在多个角色 - 权限略有不同。

eg. 
Admin has all roles of captain, secretary and user.
Captain has all the roles of a user and the ability to pick players.
Secretary has all the roles of a user and contact the opponent's secretary.
Captain and secretary both have the ability to email players.

如果您愿意,可以将其想象成权限的维恩图

缓存

下一个问题是,每次访问数据库都会增加性能开销,所以我想缓存它是有意义的。

然后问题就来了,如何使缓存无效(计算机科学中只有两件难事...)...也许可能有一个数据库字段具有 ACL 的 md5 哈希值,该字段已被检查反对on page-load,看是否需要重新加载ACL信息。

最佳答案

是的@TheMmonarch 你的问题真的很棒而且 phalcon 用户经常问。甚至我也在寻找我还没有找到的同类解决方案。我尝试编写一些自定义代码以使用数据库使 ACL 动态化,但仍在努力解决这个问题。

我浏览了很多网站和博客,最后我遇到了这样的数据库结构,它可能有助于构建这种系统。

CREATE TABLE `roles` (
`name` VARCHAR(32) NOT NULL,
`description` TEXT,
PRIMARY KEY(`name`)
);
CREATE TABLE `access_list` (
`roles_name` VARCHAR(32) NOT NULL,
`resources_name` VARCHAR(32) NOT NULL,
`access_name` VARCHAR(32) NOT NULL,
`allowed` INT(3) NOT NULL,
PRIMARY KEY(`roles_name`, `resources_name`, `access_name`)
);

CREATE TABLE `resources` (
`name` VARCHAR(32) NOT NULL,
`description` TEXT,
PRIMARY KEY(`name`)
);

CREATE TABLE `resources_accesses` (
`resources_name` VARCHAR(32) NOT NULL,
`access_name` VARCHAR(32) NOT NULL,
PRIMARY KEY(`resources_name`, `access_name`)
);

CREATE TABLE `roles_inherits` (
`roles_name` VARCHAR(32) NOT NULL,
`roles_inherit` VARCHAR(32) NOT NULL,
PRIMARY KEY(roles_name, roles_inherit)
);

如有任何建议或更改,我们将不胜感激!!!

关于database - General/Phalcon - ACL 和数据库存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21909817/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com