PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
pantela
Отправлено: 17 Октября, 2017 - 19:37:00
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 731
Дата рег-ции: Авг. 2010  


Помог: 1 раз(а)




Есть проект где много страниц и функции, надо сделать распределение прав. для пользователей.
В БД имею след. архитектуру таблиц:
users - список пользователей
roles - список групп
roles_users - Какие группы у пользователя (связка идёт виде users.id = roles.id)

Теперь я беру в таблицу "roles" делабю товые поля и там прописываю напр. "news_list", "news_add", "news_remove" и присваиваю для группы "0" или "1", та ки определяю должна функция быть доступна или нет...

Но вопрос в том что у меня много страниц и функции и все загонять в таблиц roles виде полей не приятно...

Как вариант думаю втой же таблице roles держать их виде записей а не виде полей, но тогда архитектуру таблиц пользователей надо малость менять.

Спс.

CODE (SQL):
скопировать код в буфер обмена
  1. CREATE TABLE IF NOT EXISTS `roles` (
  2.   `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  3.   `name` varchar(32) NOT NULL,
  4.   `description` varchar(255) NOT NULL,
  5.   PRIMARY KEY  (`id`),
  6.   UNIQUE KEY `uniq_name` (`name`)
  7. ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
  8.  
  9. INSERT INTO `roles` (`id`, `name`, `description`) VALUES(1, 'login', 'Login privileges, granted after account confirmation');
  10. INSERT INTO `roles` (`id`, `name`, `description`) VALUES(2, 'admin', 'Administrative user, has access to everything.');
  11.  
  12. CREATE TABLE IF NOT EXISTS `roles_users` (
  13.   `user_id` int(10) UNSIGNED NOT NULL,
  14.   `role_id` int(10) UNSIGNED NOT NULL,
  15.   PRIMARY KEY  (`user_id`,`role_id`),
  16.   KEY `fk_role_id` (`role_id`)
  17. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
  18.  
  19. CREATE TABLE IF NOT EXISTS `users` (
  20.   `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  21.   `email` varchar(254) NOT NULL,
  22.   `username` varchar(32) NOT NULL DEFAULT '',
  23.   `password` varchar(64) NOT NULL,
  24.   `logins` int(10) UNSIGNED NOT NULL DEFAULT '0',
  25.   `last_login` int(10) UNSIGNED,
  26.   PRIMARY KEY  (`id`),
  27.   UNIQUE KEY `uniq_username` (`username`),
  28.   UNIQUE KEY `uniq_email` (`email`)
  29. ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
  30.  
  31. CREATE TABLE IF NOT EXISTS `user_tokens` (
  32.   `id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
  33.   `user_id` int(11) UNSIGNED NOT NULL,
  34.   `user_agent` varchar(40) NOT NULL,
  35.   `token` varchar(40) NOT NULL,
  36.   `type` varchar(100) NOT NULL,
  37.   `created` int(10) UNSIGNED NOT NULL,
  38.   `expires` int(10) UNSIGNED NOT NULL,
  39.   PRIMARY KEY  (`id`),
  40.   UNIQUE KEY `uniq_token` (`token`),
  41.   KEY `fk_user_id` (`user_id`)
  42. ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;
  43.  
  44. ALTER TABLE `roles_users`
  45.   ADD CONSTRAINT `roles_users_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE,
  46.   ADD CONSTRAINT `roles_users_ibfk_2` FOREIGN KEY (`role_id`) REFERENCES `roles` (`id`) ON DELETE CASCADE;
  47.  
  48. ALTER TABLE `user_tokens`
  49.   ADD CONSTRAINT `user_tokens_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE;
 
 Top
Sail
Отправлено: 18 Октября, 2017 - 22:27:29
Post Id



Участник


Покинул форум
Сообщений всего: 1085
Дата рег-ции: Февр. 2014  


Помог: 56 раз(а)




pantela пишет:
Но вопрос в том что у меня много страниц и функции и все загонять в таблиц roles виде полей не приятно...

На этот случай есть связь "многие-ко-многим". Иными словами - "таблица связей".
Ведь используете roles_users. Тут ведь тоже не одна роль у пользователя, как и не один пользователь у роли может быть. Улыбка
А ещё права можно не только группе давать, но и пользователю.
Отсюда - ещё одна таблица соответствия пользователей правам доступа.
 
 Top
pantela
Отправлено: 19 Октября, 2017 - 12:32:57
Post Id



Частый посетитель


Покинул форум
Сообщений всего: 731
Дата рег-ции: Авг. 2010  


Помог: 1 раз(а)




Как я понял по вашим словам если я создавал поля как права, мне надо будет создавать записи, т.е. елси запись права есть у пользователя тогда дать ему доступ... как-то так...?
 
 Top
Sail
Отправлено: 20 Октября, 2017 - 23:07:27
Post Id



Участник


Покинул форум
Сообщений всего: 1085
Дата рег-ции: Февр. 2014  


Помог: 56 раз(а)




pantela пишет:
Как я понял по вашим словам если я создавал поля как права, мне надо будет создавать записи, т.е. елси запись права есть у пользователя тогда дать ему доступ... как-то так...?

Да, как-то так.
Или пользователю, или группе, или и тому и другому и можно без масла
Или можно набор прав как битовую маску в UINT хранить... и при обращении - побитовые операции использовать.
 
 Top
LIME
Отправлено: 21 Октября, 2017 - 00:40:03
Post Id



Активный участник


Покинул форум
Сообщений всего: 9990
Дата рег-ции: Нояб. 2010  


Помог: 296 раз(а)




Sail пишет:
Или можно набор прав как битовую маску в UINT хранить... и при обращении - побитовые операции использовать.
или проще SET использовать, который и есть по сути битовая маска только не надо битовые операции мучать


-----
вау
я кажется понял жастЮзера!!!
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Администрирование БД »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB