[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Права доступа
Renden
Доброго вечера, вопрос собственно в теме, приведу пример
у меня сейчас права доступа беруться из базы и пишутся в сессию ну и в переменную $access
например 1 - админ; 2-модератор;3-редактор.
так вот, чтоб раставить на страницах права мне надо сделать кучу проверок такого вида:

if ($access == 1 || $access == 2) {
echo "Редактировать пользователей";
}
if ($access == 1 || $access == 2 || $access == 3) {
echo "Редактировать новости";
}
//В том числе и вложеные бывают
if ($access == 1 || $access == 2 || $access == 3) {
echo "Заказать";
if ($access != 3) {
echo "Отменить заказ";
}}

Чето меня эта конструкция как-то напрягает, особенно когда теперь достаточно сильно завязка на права идет. Темпаче чтоб мне допустим в одном месте вывести сылку, а в другом какой-то контент приходится писать одни и теже проверки несколько раз.
    Как можно упросить, да и вообще как грамотно сделать?
    Еще вопрос я слышал что в ООП есть такое понятие как наследование, теоритически можно получается же задать сначала самые маленькие права (права в плане набор сылок например и функционала) редактора и наследовать их до администратора?




Спустя 15 часов, 6 минут, 15 секунд (22.02.2011 - 12:45) Renden написал(а):
Омг, меня что игнорят на форуме?, вроде никого не обижал smile.gif
Вопрос больше теоритический как кто делает реализацию прав..

Спустя 7 минут, 29 секунд (22.02.2011 - 12:52) Семён написал(а):
В модуле например держать id-access-a, который должен быть в списке прав пользователя.
К примеру:
news. access_keys: 2,3,4,5
У пользователя Vasya в списке прав должен присутствовать keys: 1,2,3,4,5,6
Для проверки доступа юзать какую-нибудь функцию $this->checkAccess(''2,3,4,5");

Спустя 1 минута, 56 секунд (22.02.2011 - 12:54) Snus написал(а):
Renden
if ($access == 1 || $access == 2 || $access == 3) {

С легкостью можно заменить на
if($access <= 3){

Спустя 3 минуты, 53 секунды (22.02.2011 - 12:58) Renden написал(а):
Семён
Проверка то будет в функции, а на странице всеравно придется делать проверку if подругому никак?
Snus
Ну это я расписал чтоб наглядно было smile.gif

Спустя 39 секунд (22.02.2011 - 12:59) Snus написал(а):
Renden
А так не наглядно? :D
if($access <= 3){

Спустя 2 минуты, 21 секунда (22.02.2011 - 13:01) Snus написал(а):
Renden

  switch ($access) {

case '2':
echo 'Редактировать пользователей';
break;

case '3':
echo 'Редактировать новости';
break;

default:
echo 'Юзверь, пшлнх :)';
break;

}


Спустя 4 минуты, 36 секунд (22.02.2011 - 13:06) Renden написал(а):
Snus
echo 'Юзверь, пшлнх smile.gif';
Ггыгы)
Да эту конструкцию я знаю, у мня вопрос в том что если мне допутим надо в 1 месте вывести только сылки, а в другом допустим каку-ю то часть контента, то я пишу if (или swith) несколько раз, да и в каждом файлике типа index.php, pages.php.
Как люди загоняют все права в 1 функцию, класс или еще что, чтоб не плодить код?

Спустя 4 минуты, 58 секунд (22.02.2011 - 13:11) Snus написал(а):
Renden
Ну напиши в отдельный файл acc.php и иклудь везде biggrin.gif

Спустя 9 минут, 19 секунд (22.02.2011 - 13:20) Renden написал(а):
Snus
Ты несовсем понял, вопрос больше по структуре у меня так примерно выглядит:

include('head.php');
if($access == 1){
//кучка контента которая показывается в head (сылки, напоминалки там)
}
if($access == 2){
//другая кучка контента которая показывается в head (сылки, напоминалки там)
}
echo "</head><body>";
if($access == 1){
//Показываю там фигнюшки для редактирования меню, пользователей и тп
}

тут код который для всех

if($access <= 3){
//Показываю n количество кода для редактирование новостей
}

еще код для всех и тп

include('foot.php');

И так на практически на каждой странице (ну естесно разные сылки, разный контент) но этот вид смачно тянет на быдлокод, а мне порабы уже как-то учиться чтоль, потому и спрашиваю знатоков как вот они реализовывают..
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.