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
Форумы портала PHP.SU :: Версия для печати :: Создание группы пользователей + прав доступа
Форумы портала PHP.SU » » Вопросы новичков » Создание группы пользователей + прав доступа

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

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

хочется понять принцип всего...надеюсь поможете и объясните..а то надоело биться об стену и не понимать...
2. Medallion - 27 Мая, 2012 - 13:21:05 - перейти к сообщению
Я так себе представляю реализацию.
При регистрации пользователя в табличку users с данными при регистрации, допустим в поле action назовем его так, мы записываем число 1.
Для младшего модера, число 2
Для модера - число 3
Для админа - число 4
В каждой таблице с данными форума, есть также поле action, где стоит определенная цифра, для кого показывать это контент.
Если ноль, это по-умолчанию, для гостя, для всех.
Как пользователь, заходит на сайт, вводя свой логин и пароль, сначала выбирается поле users с полем action и составляется запрос, выбрать мне те поля в таблицах, где значение action пользователя, меньше или равно значение action полей контента.
3. Green - 27 Мая, 2012 - 13:21:35 - перейти к сообщению
Обычно делают так:
Создают таблицу, ну например 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. }


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

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

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

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 'У вас нет прав для добавления комментария';
7. Green - 27 Мая, 2012 - 13:41:22 - перейти к сообщению
etoYA пишет:
add_comments,add_news,etc.



Хм, отличная идея, хранить все возможности группы в одной ячейке. Возьму себе. Однако Я сам как-то и не догадался)))
8. OrmaJever - 27 Мая, 2012 - 13:42:27 - перейти к сообщению
Green пишет:
Создают таблицу, ну например groups. В ней два поля. Id, name.

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

А в таблице пользователей есть поле group с ключём из масива, и при когда нужно узнать групу получать как-то так
PHP:
скопировать код в буфер обмена
  1. $group[$row['group']];
9. Bio man - 27 Мая, 2012 - 13:43:05 - перейти к сообщению
Вот хорошо описано http://habrahabr[dot]ru/post/51327/
10. Fsingle - 27 Мая, 2012 - 13:43:27 - перейти к сообщению
народ ей богу спасибо....)давно надо было сюда взглянуть всем огромное спасибо за отклик...я рад...)))позже начну пробовать все это...)если что вопросы сюда кину...)всем еще раз спасибооо)
11. etoYA - 27 Мая, 2012 - 13:47:03 - перейти к сообщению
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)
12. DelphinPRO - 27 Мая, 2012 - 13:53:23 - перейти к сообщению
Green пишет:
Делается еще один запрос.

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

PS ага, уже показали..
13. etoYA - 27 Мая, 2012 - 13:54:03 - перейти к сообщению
OrmaJever пишет:
Не проще создать масив гдето в файле config.php вида

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

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

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

Нормальный и более гибкий. Если понадобится добавлять новые группы и разрешения.
15. etoYA - 27 Мая, 2012 - 14:00:34 - перейти к сообщению
DelphinPRO, вариант с конфигом тоже гибкий, особенно с моим, так как там также просто установить переменную

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

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

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

 

Powered by ExBB FM 1.0 RC1