Проверка на права юзеров и админа...

Сенсей

Новичок
Проверка на права юзеров и админа...

Вопрос скорее теоретически....

Как сделано щас:

function is_user()
{
определяем является ли посетитель юзером
}

function is_admin()
{
определяем является ли посетитель админом
}

функции фозвращают true если все правильно

теперь ... вот есть например страничка юзера .. и ссылка на удаление сообщения показывается по условию :

PHP:
if (is_user()) OR (is_admin())
{
echo '<a href="blablabla">blablabla</a>';
}
Но мне не нравится такой подход... сам не знаю почему :(
 

Gas

может по одной?
Сенсей
может стоит подумать над тем чтоб юзерам раздавать права на действия (каждому юзеру отдельно или объединять их в группы решай сам).
И проверять что-то типа $auth->is_permitted($user_id, 'delete_page');
Логика
if (is_user()) OR (is_admin())
должна быть инкапсулирована где-то в одном месте, а не раскидана по коду. Вдруг прийдётся добавить новый тип пользователей.
 

nikit87

Новичок
>Но мне не нравится такой подход... сам не знаю почему

потому что странно как-то все это и нелепо. По какому параметру определяется то что юзер админ?
 

Royal Flash

-=MaestrO=-
Сделай все на сессиях, как делается в большинстве админинтерфейсов. 1 раз после регистрации пользователя в системе выдаеш ему права (смотриш, что позволено этому пользователю, например записываеш его уровень доступа в сессионную переменную) а потом, при доступе в закрытый раздел проверяеш, соответствует ли уровень доступа юзера уровню доступа скрипта. Или еще проще, если пользователь админ, пишеш $_SESSION[admin] = 'on'; И потом проверяеш, является ли $_SESSION[admin] == 'on'
 

Gas

может по одной?
Royal Flash
если существует несколько типов member'ов c разными правами на какие-то объекты/действия или предусматривается возможность расширения системы с учётом этого, то растыкивать везде if'ы не очень хорошая идея. Имхо, проверки такого рода должны быть в одном месте и валидация прав на основе переданного user_id и проверяемой сущности.
 

Royal Flash

-=MaestrO=-
Gas
На счет ифов согласен, только просьба подробнее про "валидация прав на основе переданного user_id и проверяемой сущности." Желательно пример (логика). Ведь если есть много разделов с различным уровнем доступа к ним, всеравно нужно проверять, есть ли у данного пользователя права на редактирование (к примеру) данного раздела. И другого варианта, кроме как проверки, наподобии "если пользователь имеет право на редактирование, открыть редактор" я не вижу или не знаю :)
 

Gas

может по одной?
Желательно пример (логика). Ведь если есть много разделов с различным уровнем доступа к ним, всеравно нужно проверять, есть ли у данного пользователя права на редактирование
В общем случае зависит от того как построена система.
В твоём примере можно передавать id юзера, который работает с системой, раздел и действие, совершаемое над разделом в механизм проверки прав. Он уже возвращает можно ли совершить действие или нет. Ну а конкретную реализацию каждый пишет в зависимости от своих требований.
 

yugene

Отошел от дел
Автор оригинала: Сенсей
ссылка на удаление сообщения показывается по условию :
не забывай делать проверку не только при выводе ссылки на действие, но и перед самим действием.
 

cober

Guest
Можно сделать так:

Добавляешь флаг, допустим, в базу (например 2 - админ, 0 - просто юзер и 1 - модератор)

В начале каждой страницы делаешь выборку из базы по логину (который содержится в сессии или куке).

По этому логину получаешь уровень доступа и проверяешь где тебе надо. Теперь на примере:

if (isset($_SESSION['UserLogin']) and isset($_SESSION['UserPassword'])){
// получение логина, пароля и уровня доступа из базы
$_SESSION['UserLogin'] = DelSpecChar($_SESSION['UserLogin']);
$_SESSION['UserPassword'] = DelSpecChar($_SESSION['UserPassword']);
$sql = "
SELECT name, pass, access
FROM ".$Perfix."user
WHERE name = '".$_SESSION['UserLogin']."' AND pass = '".$_SESSION['UserPassword']."'
";
$result = mysql_query($sql);
$UserStr = mysql_fetch_assoc($result);
mysql_free_result($result);
}

Функция DelSpecChar() удаляет и преобразует все "лишние" символы. Потом где надо проверяешь $UserStr['access'], допустим:

if (isset($UserStr['access']) and $UserStr['access']==(1 or 2)){

// какие либо админские и модерские функции

}
 
Сверху