gpt4 book ai didi

php - 使用 PHP 和 MySQL 使数据库驱动的菜单项在每个用户的基础上可见?

转载 作者:行者123 更新时间:2023-11-29 00:01:07 25 4
gpt4 key购买 nike

我正在使用 PHP 和 MySQL 为管理面板构建菜单。每个菜单项都是一条 MySQL 记录。

我需要能够为每个用户设置每个菜单记录/项目的可见性。

我意识到大多数人会改为在“用户组”的基础上这样做,但是我的老板要求每个菜单项都以个人为基础,以确定谁可以查看哪些菜单项。

我知道如何非常轻松地制作一个基于每个用户组的可见性的数据库驱动菜单,但是我不确定如何在每个用户的基础上进行操作?

如果数据库中有 20 个菜单项和 20 个用户。我需要能够设置一个设置/权限来指示每个用户是否可以查看或不能查看每个单独的菜单项记录。

关于它在 MySQL 数据库结构中的外观有什么想法和帮助吗?

这是我当前的菜单 SQL 模式...

CREATE TABLE IF NOT EXISTS `intranet_links` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) DEFAULT NULL,
`description` text NOT NULL,
`url` varchar(255) DEFAULT NULL,
`permission` varchar(50) NOT NULL DEFAULT 'admin',
`notes` text,
`active` int(2) NOT NULL DEFAULT '1',
`sort_order` int(11) DEFAULT NULL,
`parent_id` int(10) NOT NULL DEFAULT '1',
PRIMARY KEY (`id`),
UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;

菜单系统如下图所示。将有父菜单项和子菜单项,这使得父菜单记录表现得像文件夹/目录......

enter image description here

最佳答案

拥有 user_to_item 表似乎是显而易见的解决方案,但我仍然会选择基于组的权限。为什么?

假设您有 10 万个用户,并且您正在添加新的菜单项以供所有用户看到,对于 user_to_items 表,您必须进行 10 万次插入,然后在删除权限时,再次进行 10 万次删除,突然间您的 mysql 开始因碎片而阻塞.此外,您肯定会有一些公共(public)区域可供所有人查看,而某些部分仅供管理员使用 - 再次强调使用群组。

我的建议是拥有 user_to_group 权限,比如“Server Admin”组和“Other Services”,然后有单独的 user_to_item 表,只有在用户有组权限。还记得有一些类似 child <->祖先的关系,所以你可以快速找到某个 parent 前任的所有 child :

item_id | name                
1 |'Server Admin'
2 |'phpMyAdmin'
3 |'phpMyAdmin_subItem'

item_id | ancestor_id
1 | null
2 | 1
3 | 1
3 | 2

这样通过 ancestor_id = 1 查找可以快速找到 phpMyAdmin 和 phpMyAdmin_subItem 属于 Server Admin 目录,然后执行权限检查。

关于php - 使用 PHP 和 MySQL 使数据库驱动的菜单项在每个用户的基础上可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29783386/

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