gpt4 book ai didi

php - 用户认证和权限表结构

转载 作者:行者123 更新时间:2023-11-29 03:11:24 26 4
gpt4 key购买 nike

我正在创建一个用户身份验证库(用于练习)。

我要添加的其中一件事是,一个用户可以被分配到多个角色。

每个角色都有一组权限(比如 editUser、createUser 等)。

如果用户是两个组的一部分,如果任何组有权执行某项操作,则该用户可以执行该操作。

我想知道从 mysql 数据库的角度来看存储此信息的最佳方式。

我在想

users            : ID            | username | etc  
groups : ID | name | etc
user_group : group_ID | user_ID
permissions : ID | name | description (lookup table)
group_permission : permission_ID | group_ID

基本上,如果一个组具有权限,那么它会在 group_permission 中获得一个条目。

我的问题是,这是最有效的方法吗,还是我最好将每个权限作为组表中的一列并删除 group_permission 表?

最佳答案

您的方法看起来不错且规范化,值得称赞。
我缺少的一件事是非权限表,即不允许操作的表。
Active Directory 具有此功能,这使您可以快速阻止对对象的权限。

这允许您允许访问所有帐户,除了.....
如果反过来,则必须允许访问每个对象,同时忽略 HR 数据。
第一种方式设置2个对象的权限(1个父级权限,1个子级解雇),第二种方式可能会遇到几十个权限。

我个人会更新 permissions 表以也包含排除项。
这将允许您将排除项附加到组和用户。

使用黑洞表来简化新权限的添加
为了简化添加新权限,您可以创建一个新的黑洞表。
这不会存储任何内容,但会触发一个触发器,而不是为您执行插入,通过这种方式,您可以隐藏您的数据库已从插入代码中标准化的事实。

CREATE TABLE bh_permission (
user_or_group_id unsiged integer not null,
isuser ENUM('user','group') not null default 'user',
permission_description varchar(255) not null,
allow_or_not ENUM('allow','forbid') not null default 'allow'
) ENGINE = BLACKHOLE;

现在您可以插入指定组或用户 ID 的表

INSERT INTO bh_permission VALUES ('123','group','p_HR_files_2011','forbid');

并有一个触发器来处理技术细节:

DELIMITER $$

CREATE TRIGGER ai_bh_permission_each AFTER INSERT ON bh_permission FOR EACH ROW
BEGIN
DECLARE Mypermission_id INTEGER;
//like is always case-insensitive, `=` is not.
SELECT p.id INTO Mypermission_id FROM permissions p
WHERE name LIKE NEW.permission_description LIMIT 1;
IF isuser = 'user' THEN
INSERT IGNORE INTO user_permission (user_id, permission_id, allow_or_not)
VALUES (NEW.user_or_group_id, Mypermission_id, NEW.allow_or_not);
ELSE
INSERT IGNORE INTO group_permission (group_id, permission_id, allow_or_not)
VALUES (NEW.user_or_group_id, Mypermission_id, NEW.allow_or_not);
END IF;
END $$

DELIMITER ;

关于php - 用户认证和权限表结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7750625/

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