2015-04-21 16 views
1

我正在使用PHP和MySQL构建管理面板的菜单。每个菜单项都是一个MySQL记录。使用PHP和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

+0

上述20位用户各自的权限是否不同? – Maximus2012

+1

一个将用户的表加入用户标识的表。该表中每个链接都可以接受BOOLEAN的列。 –

+2

怎么样一个简单的地图表与2列:用户和菜单项ID的? –

回答

1

有user_to_item表似乎是显而易见的解决方案但我还是会去的基于组的权限。为什么?假设你有100K个用户,并且你要添加新的菜单项以便它们全部可见,用user_to_items表你必须做100K插入,然后当删除权限时,再次100K删除,突然你的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属于到服务器管理员目录,然后执行您的权限检查。

相关问题