2015-04-21 1 views
1

Я создаю меню для панели администратора с использованием PHP и MySQL. Каждый элемент меню является записью MySQL.Сделать базы данных управляемыми элементами меню, видимыми для каждого пользователя, используя PHP и MySQL?

Мне нужно уметь устанавливать видимость каждой записи/элемента меню для каждого пользователя.

Я понимаю, что большинство людей будут делать это на основе «группы пользователей», однако мой босс требует, чтобы каждый элемент меню находился на индивидуальном уровне для каждого человека, чтобы определить, кто может просматривать какие пункты меню.

Я знаю, как довольно легко сделать меню с управляемой базой данных с видимостью на основе каждой группы пользователей, но я не уверен, как это сделать для каждого пользователя?

Если в базе данных имеется 20 пунктов меню и 20 пользователей. Мне нужно будет установить параметр/разрешение, чтобы указать, могут ли каждый пользователь просматривать или не просматривать каждую отдельную запись элемента меню.

Любые идеи и помощь в том, как это может выглядеть в структуре базы данных MySQL?

Вот мое текущее меню SQL Schema ...

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

Как насчет прямой таблицы карт с двумя столбцами: идентификатор пользователя и элемента меню? –

ответ

1

Имея user_to_item стола кажется, очевидным решением все же я до сих пор бы разрешения на основе групп , Зачем?

Представьте, что у вас есть пользователи 100K, и вы добавляете новый элемент меню, чтобы быть видимым всеми из них, с таблицей user_to_items вам нужно делать 100K вставок, затем при удалении разрешения снова 100K удаляет и вдруг ваш mysql начинает задыхаться фрагментация. Также у вас будет определенно какая-то общая область, чтобы видеть все и некоторые части только для администратора - снова pont для использования групп.

У меня было бы разрешение 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 принадлежат в каталог администратора сервера, а затем выполните проверки разрешений.

 Смежные вопросы

  • Нет связанных вопросов^_^