2015-04-21 20 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屬於到服務器管理員目錄,然後執行您的權限檢查。

相關問題