gpt4 book ai didi

php - 在数据库中存储应用程序权限

转载 作者:IT王子 更新时间:2023-10-29 00:30:18 26 4
gpt4 key购买 nike

我正在为我们公司开发一个应用程序,它最终将有很多方法来限制用户使用特定的部分/模块。虽然应用程序仍然很小,但我想转向一种新的存储权限的方法,随着应用程序的增长,这种方法仍然易于维护和查询。

目前在我们的 MySQL 数据库中,我们有一个名为“user”的表,其中存储了用户的 ID、用户名和密码。在名为“user_acl”的单独表中如下:

user_acl_id
acl_root
acl_news_read
acl_news_write
acl_news_modify
acl_reports_read
acl_reports_write
acl_reports_modify
acl_users_read
acl_users_write
acl_users_modify

目前我们只有 3 个模块,但随着时间的推移会创建更多模块,并且需要为每个模块添加权限。

除了为每个权限创建一个列,还有其他方法或存储此信息吗?

最佳答案

我会这样做。

table name: permission
columns: id, permission_name

然后我可以使用多对多关系表为用户分配多个权限

table name: user_permission
columns: permission_id, user_id

这种设计将允许我添加任意数量的权限,并将其分配给任意数量的用户。

虽然上述设计符合您的要求,但我有自己的方法在我的应用程序中实现 ACL。我把它张贴在这里。

我实现ACL的方法是这样的:

  1. 用户将被分配一个角色(管理员、 guest 、员工、公众)
  2. 角色将被分配一个或多个权限(user_write、user_modify、report_read)等。
  3. 用户的权限将从他/她的角色继承
  4. 除了从角色继承的权限之外,还可以为用户分配手动权限。

为此,我提出了以下数据库设计。

role
I store the role name here
+----------+
| Field |
+----------+
| id |
| role_name |
+----------+

permission:
I store the permission name and key here
Permission name is for displaying to user.
Permission key is for determining the permission.
+----------------+
| Field |
+----------------+
| id |
| permission_name |
| permission_key |
+----------------+

role_permission
I assign permission to role here
+---------------+
| Field |
+---------------+
| id |
| role_id |
| permission_id |
+---------------+

user_role
I assign role to the user here
+---------------+
| Field |
+---------------+
| id |
| user_id |
| role_id |
+---------------+

user_permission
I store the manual permission I may allow for the user here
+---------------+
| Field |
+---------------+
| id |
| user_id |
| permission_id |
+---------------+

这使我可以更好地控制 ACL。我可以让 super 管理员自己分配权限,等等。正如我所说,这只是为了给你一个想法。

关于php - 在数据库中存储应用程序权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10311413/

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