Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Создание группы пользователей + прав доступа

 PHP.SU

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


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

> Описание: Права доступа
Fsingle
Отправлено: 27 Мая, 2012 - 12:35:39
Post Id


Новичок


Покинул форум
Сообщений всего: 25
Дата рег-ции: Май 2012  


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




Добрый день дамы и господа, то есть пользователи этого форума.. Как бы банально не звучало или что то еще..но у меня есть просьба.... Просьба заключается в пошаговом примере и объяснение создания группы пользователей в mysql и дача им прав доступа php..
Знаю многие пошлют меня искать скрипты и прочее...но я искал....не нашел....нашел но не совсем понял принцип и снова бросил...вот снова вернулся к этому вопросу из любопытства...
вот три типа пользователей
Гость имеет только возможность чтение но не имеет других возможностей и не имеет доступа к закрытому разделу,контенту и прочее..
Группы Пользователь регистрированный.. имеет возможность комментировать, редактировать свои комменты, видеть закрытый раздел который виден для пользователей.
Группы Модератор это понятно уж
Группы младший администратор.
Группы Администратор это тоже понятно..

хочется понять принцип всего...надеюсь поможете и объясните..а то надоело биться об стену и не понимать...

(Отредактировано автором: 27 Мая, 2012 - 12:36:43)

 
 Top
Medallion
Отправлено: 27 Мая, 2012 - 13:21:05
Post Id



Частый гость


Покинул форум
Сообщений всего: 253
Дата рег-ции: Май 2012  
Откуда: Херсон, Украина


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




Я так себе представляю реализацию.
При регистрации пользователя в табличку users с данными при регистрации, допустим в поле action назовем его так, мы записываем число 1.
Для младшего модера, число 2
Для модера - число 3
Для админа - число 4
В каждой таблице с данными форума, есть также поле action, где стоит определенная цифра, для кого показывать это контент.
Если ноль, это по-умолчанию, для гостя, для всех.
Как пользователь, заходит на сайт, вводя свой логин и пароль, сначала выбирается поле users с полем action и составляется запрос, выбрать мне те поля в таблицах, где значение action пользователя, меньше или равно значение action полей контента.
 
 Top
Green
Отправлено: 27 Мая, 2012 - 13:21:35
Post Id



Частый гость


Покинул форум
Сообщений всего: 214
Дата рег-ции: Апр. 2012  
Откуда: Кисловодск


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




Обычно делают так:
Создают таблицу, ну например groups. В ней два поля. Id, name.

Добавляется запись:
id | name
1 | Администраторы


В таблицу с пользователями, например users, добавляется поле(ячейка) group_id.

Делаем запрос, и мы получаем из БД все данные пользователя.
CODE (htmlphp):
скопировать код в буфер обмена
  1. $sql   = "SELECT * FROM `users` WHERE `id` = '" . $_SESSION["user_id"] . "'";
  2. $query = mysql_query($sql) OR die(mysql_error());
  3. $user  = mysql_fetch_assoc($query);


Предположим, что в $_SESSION["id_user"] хранится ID пользователя.

Делается еще один запрос.
CODE (htmlphp):
скопировать код в буфер обмена
  1. $sql   = "SELECT * FROM `groups` WHERE `id` = '" . $user["group_id"] . "'";
  2. $query = mysql_query($sql) OR die(mysql_error());
  3. $group = mysql_fetch_assoc($query);


Теперь смотрите. Добавляем ячейку edit_comment, с default 'no'. Правим запись Администраторы в таблице с группами, в edit_comment вставляем: yes.

Далее в скрипте делаете проверку:
CODE (htmlphp):
скопировать код в буфер обмена
  1. if($group["edit_comment"] == "yes") {
  2. /* тут код который редактирует комментарии */
  3. }
  4. else {
  5. /* тут сообщения мол нету прав */      
  6. }


Дальше делайте по такому же принципу.

Ну вот как-то так делаются группы пользователей на сайтах. Надеюсь я Вам помог. Улыбка

(Отредактировано автором: 27 Мая, 2012 - 13:30:04)

 
 Top
Muxa
Отправлено: 27 Мая, 2012 - 13:25:51
Post Id



Частый гость


Покинул форум
Сообщений всего: 247
Дата рег-ции: Март 2012  
Откуда: Россия, Тверь


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




Green пишет:
Ну вот как-то так делаются группы пользователей на сайтах
это будет только две группы - админы и обычные юзеры. а ТС требуется то, что написал как раз Medallion
(Добавление)
хотя если поменять yes и no например на 1,2,3,4,5 и т.д. - то код слегка изменится всего лишь)
 
 Top
Green
Отправлено: 27 Мая, 2012 - 13:29:31
Post Id



Частый гость


Покинул форум
Сообщений всего: 214
Дата рег-ции: Апр. 2012  
Откуда: Кисловодск


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




Muxa пишет:
это будет только две группы - админы и обычные юзеры.

Как так? Не понял А что мне помешает добавить новые записи в groups?
Мой пример позволяет реализовать неограниченное кол-во групп. Не понял
 
 Top
etoYA
Отправлено: 27 Мая, 2012 - 13:37:16
Post Id



Участник


Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011  
Откуда: Крым


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




А я у себя сделал. Точнее пока не сделал, но буду делатьУлыбка

groups
id | name | access

1 | admin | add_comments,add_news,etc.

Затем ячейка access разбивается на массив и сверяется с условием.

PHP:
скопировать код в буфер обмена
  1. $group = explode(',' $row['access']);
  2.  
  3. if (in_array('add_comments', $group)){
  4.      // форма добавления комментариев
  5. }

else echo 'У вас нет прав для добавления комментария';

(Отредактировано автором: 27 Мая, 2012 - 13:38:04)

 
 Top
Green
Отправлено: 27 Мая, 2012 - 13:41:22
Post Id



Частый гость


Покинул форум
Сообщений всего: 214
Дата рег-ции: Апр. 2012  
Откуда: Кисловодск


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




etoYA пишет:
add_comments,add_news,etc.



Хм, отличная идея, хранить все возможности группы в одной ячейке. Возьму себе. Однако Я сам как-то и не догадался)))
 
 Top
OrmaJever Модератор
Отправлено: 27 Мая, 2012 - 13:42:27
Post Id



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


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


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




Green пишет:
Создают таблицу, ну например groups. В ней два поля. Id, name.

Не согласен. Зачем создавать лишнюю таблицу в бд для нескольких статичных записей? Не проще создать масив гдето в файле config.php вида
PHP:
скопировать код в буфер обмена
  1. $groups = array('user', 'admin', 'moderator', ...);

А в таблице пользователей есть поле group с ключём из масива, и при когда нужно узнать групу получать как-то так


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Bio man
Отправлено: 27 Мая, 2012 - 13:43:05
Post Id


Постоянный участник


Покинул форум
Сообщений всего: 2751
Дата рег-ции: Июль 2010  
Откуда: Даугавпилс, Латвия


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




Вот хорошо описано http://habrahabr[dot]ru/post/51327/
 
 Top
Fsingle
Отправлено: 27 Мая, 2012 - 13:43:27
Post Id


Новичок


Покинул форум
Сообщений всего: 25
Дата рег-ции: Май 2012  


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




народ ей богу спасибо....)давно надо было сюда взглянуть всем огромное спасибо за отклик...я рад...)))позже начну пробовать все это...)если что вопросы сюда кину...)всем еще раз спасибооо)
 
 Top
etoYA
Отправлено: 27 Мая, 2012 - 13:47:03
Post Id



Участник


Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011  
Откуда: Крым


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




PHP:
скопировать код в буфер обмена
  1. $result = mysql_query("SELECT `u`.`id`, `u`.`login`, `u`.`group`, `g`.`name` AS 'group', `g`.`access` FROM `users` u INNER JOIN `groups` g ON `u`.`group` = `g`.`id` && `login` = '$login' && `password` = '$pass'");
  2. $_SESSION['user'] = mysql_fetch_assoc($result);
  3.  


И спасибо Bio_man`у не использую 2-3 запроса)). А все пихаю в 1)

(Отредактировано автором: 27 Мая, 2012 - 13:48:35)

 
 Top
DelphinPRO
Отправлено: 27 Мая, 2012 - 13:53:23
Post Id



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


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


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




Green пишет:
Делается еще один запрос.

вместо еще одного запроса можно джойном сразу достать группу пользователя и его права

PS ага, уже показали..

(Отредактировано автором: 27 Мая, 2012 - 13:55:08)



-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
etoYA
Отправлено: 27 Мая, 2012 - 13:54:03
Post Id



Участник


Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011  
Откуда: Крым


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




OrmaJever пишет:
Не проще создать масив гдето в файле config.php вида

А у меня config.ini ). Можно конечно сделать

[Groups]
admin = bla, blabla
user = bla, bla

Но мне кажется, что вариант с бд нормальный. Так как выбирается 1 раз при авторизации, а потом уже сравнивается с сессией
 
 Top
DelphinPRO
Отправлено: 27 Мая, 2012 - 13:56:23
Post Id



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


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


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




etoYA пишет:
Но мне кажется, что вариант с бд нормальный.

Нормальный и более гибкий. Если понадобится добавлять новые группы и разрешения.


-----
Чем больше узнаю, тем больше я не знаю.
 
 Top
etoYA
Отправлено: 27 Мая, 2012 - 14:00:34
Post Id



Участник


Покинул форум
Сообщений всего: 1859
Дата рег-ции: Июль 2011  
Откуда: Крым


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




DelphinPRO, вариант с конфигом тоже гибкий, особенно с моим, так как там также просто установить переменную

PHP:
скопировать код в буфер обмена
  1. Config::getInstance()->set('groups', 'users', 'add_comments,add_news');

И получить
PHP:
скопировать код в буфер обмена
  1. Config::getInstance()->get('groups', $_SESSION['user']['group']);

Но имхо, это лишнее

(Отредактировано автором: 27 Мая, 2012 - 14:42:30)

 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


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



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

 
Powered by ExBB FM 1.0 RC1. InvisionExBB