我正在构建一个使用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 ;菜单系统如下所示。将有父菜单项和子菜单项,使父菜单记录表现为文件夹/目录.

发布于 2015-04-21 21:54:28
拥有user_to_item表似乎是显而易见的解决方案,但我仍然会选择基于组的权限。为什么?
假设您有100 K用户,并且您正在添加新的菜单项,以便所有用户都可以看到,使用user_to_items表,您必须执行100 K插入,然后在删除权限时,再次删除100 K,然后突然您的mysql开始因碎片而窒息。此外,您将有明确的一些共同的领域,以看到每个人和一些部分,仅为管理-再一次池使用组。
我的建议是拥有user_to_group权限,例如“服务器管理”组和“其他服务”,然后有单独的user_to_item表,只有当用户拥有分组权限时,才会检查该表。还请记住,要有类似于子女<->祖先关系的东西,这样您就可以快速找到某些父、母、前妻的所有孩子:
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目录,然后执行权限检查。
https://stackoverflow.com/questions/29783386
复制相似问题