Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Выделение администратора среди пользователей


Автор: zero50x 28.4.2014, 20:17
Только что закончил регистрацию и авторизацию на сайте для всех желающих.
Таблица пользователей в БД: id, логин, пароль, дата регистрации.

Хочу сделать пользователя администратора. Определить что это админ можно по логину, если логин=admin то...

Вопрос в другом: как с точки зрения программирования администратор наделяется любыми привилегиями?
У меня была мысль что в БД добавляется ещё одно поле, неважно пусть "adm" и пользователь у которого стоит в этом поле "1" считается администратором. Потом происходит проверка, например юзер пытается удалить статью другого юзера, проверка если adm у первого юзера = 1 то статья удаляется, если нет то статья остаётся нет прав.

Вообще где и что почитать про права пользователей, владение пользователей теми или иными объектами, какие функции или группы функций за это отвечают?

Автор: Sanchezzz 28.4.2014, 22:36
Цитата

Вопрос в другом: как с точки зрения программирования администратор наделяется любыми привилегиями?
У меня была мысль что в БД добавляется ещё одно поле, неважно пусть "adm" и пользователь у которого стоит в этом поле "1" считается администратором. Потом происходит проверка, например юзер пытается удалить статью другого юзера, проверка если adm у первого юзера = 1 то статья удаляется, если нет то статья остаётся нет прав.



Существует много вида извращенств, но наверное самое интересное и мало где применимое это
Группы ролей + Бизнес правила (RBAC), можно конечно использовать все по отдельности.

Если вам будет достаточно 1-2 ролей на сайте то смело делайте доп поля в таблице.

Нормализовать данные потом в что то серьезное не составит труда 

Автор: zero50x 28.4.2014, 22:38
Это была просто моя нубская догадка.
А вопрос: расскажите или дайте ссылку как это надо делать, как это правильно и логично сделать?

Sanchezzz поправьте пожалуйста сообщение вы вместо цитаты тег php использовали и вёрстка поехала от этого.

Автор: ksnk 29.4.2014, 09:58
zero50x, Я бы делал полную схему прав, по крайней мере, с точки зрения "программирования сверху".

Так, чтобы это выглядело примерно так
Код

** @var User $user  -  зарегистрированный юзер */
$user = $application->get('USER')->getCurrentUser();
/** @var Article $article - статья с которой работаем */
$article =  $application->get('ARTICLE')->get($articleId);

if ($user->hasRight(User::DELETE, $article)) {
    $article->deleteArticle();
}


В зависимости от настроения и пожеланий заказчика - метод hasRight рудиментируется в наличной реализации до проверки админ или не админ.

Для сравнения - тот же код в Yii
Код

if(Yii::app()->user->checkAccess('deletePost'))
{
    // удаляем запись
}

Вообще говоря, в Yii'шной реализации отсутствует потенциальная возможность хозяину поста удалить собственный пост, а в моем случае, с передачей объекта в параметр функции проверки, потенциальная возможность есть.

Начать читать можно с http://www.yiiframework.com/doc/guide/1.1/ru/topics.auth#sec-7. Роли можно называть также и "группами пользователей". Особой разницы нет.

Автор: zero50x 29.4.2014, 10:21
Спасибо, направление дали, я тут почитал, информации мало но обрывки находятся.
Многие предлагают всё же в БД делать поле права и там например 1, 2, 3, 4. Далее в системе при каком-то действии проверяется имеется ли нужная отметка у этого пользователя?

Кстати первый код у вас с применением ООП написан, я смысл понял, но пока им не владею.

Да я уже натыкался на информацию о том, что на фреймворках это сделать намного проще, но я новичёк и пока ими не владею.

Автор: ksnk 29.4.2014, 11:19
zero50x, Совсем без ООП делать большую систему довольно грустно. Переделывать ее придется всю сразу и неясно где и как.

Можно, конечно, упростить.
Завести 4 группы пользователей - админы, модераторы, юзеры, анонимусы (3,2,1,0). 
В таблице юзеров завести поле с индексом группы. Для системы комментариев права расставляются естественным образом - 
право на чтение имеют анонимусы++
право на добавление записи имеют юзеры++
право на изменение всех записей имеют модераторы++
Ну и админ имеет уникальное право изменять юзерам группу.

Немножко жестко, но для всего одного поля в таблице - достаточно большие возможности.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)