Проверьте разрешение пользователя в php

Как я могу создать функцию или класс PHP, который проверяет, есть ли у пользователя, который является наполовину администратором (установленным из базы данных MySQL), такие права, как создание новой страницы, редактирование или удаление? Мне нужна функция, которая проверяет права пользователя и затем отображает код следующим образом:

  if ($he_can_create_page){
  //continue the script.....
  }else{
  //don`t continue
   }

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

    If($_SESSION['user_type']=='Admin'||$_SESSION['user_type']=='premium'){
 //do stuff
 }else if()......... {
  // ..............
   }

но они становятся слишком много операторов if, и я хочу более чистый код:)

4 ответа

Решение
interface User {

    public function canCreatePage();
    public function canDeletePage();
    public function canEditPage();
    ....
}

class Admin implements User {

    public function canCreatePage(){
        return true;
    }

    public function canEditPage(){
        return true;
    }
    ...
}

class Editor implements User {

     public function canCreatePage() {
          return false;
     }

     public function canEditPage(){
        return true;
     }

     ...

}

тогда из чего вы получаете в базе данных

if ($row['user_type'] == 'Admin') {
   $user = new Admin();
} else if $row['user_type'] == 'Editor') {
   $user = new Editor();
}  ....

на всех ваших страницах:

if ($user->canCreatePage()){
  //continue the script.....
}else{
  //don`t continue
}

Если вы хотите сохранить пользователя в сеансе в первый раз, вы получите его из базы данных

$_SESSION['user'] = serialize($user);

на следующей странице

$user = unserialize($_SESSION['user']);

Или вы также можете просто сохранить идентификатор пользователя в сеансе и вернуть его из базы данных на каждой странице.

Создайте универсальную функцию и поместите ее в файл, общий для всех файлов, например

 function pageCreatePermission() {
     if($_SESSION['user_type']=='Admin'||$_SESSION['user_type']=='premium'){

          return true;

     } else { 
          return false;
}

затем используйте эту функцию в своем файле

if (pageCreatePermission()) {
     //do your stuff
 } else {
     //show error you want
 }

Ответ заключается в использовании системы контроля доступа. Есть много разных типов. Наиболее используемыми (в веб-разработке) являются ACL (список контроля доступа) и RBAC (управление доступом на основе ролей). Правила могут быть заполнены из базы данных или жестко закодированы.

Чтобы дать вам представление о том, как они работают, посмотрите на примеры из Zend Framework: ACL и RBAC. В Zend Framework ACL не сильно отличается от RBAC, поскольку у него также есть роли. Но обычно ACL основывается на пользователях, а не на ролях. Если вам нравится, вы можете интегрировать ACL/RBAC от Zend или другие фреймворки в свой собственный проект.

Читайте о том, как это сделать: yii RBAC

Добавьте столбцы в таблицу пользователей, например:

| canEdit | canDelete | canCreate |

с флагами 1/0. 1 для истинного, 0 для ложного.

выберите поля и выполните проверки, т.е.

if($row['canEdit'] = 1) {
//continue (return true)
}
else {
//stop (return false)
}

Вы можете сделать его функцией с параметрами, поэтому вы передадите ей параметр, то есть $canDelete (который является вашими данными $ строки), и он проверяет только это разрешение.

function userPermissions($type)
 if($type=1) {
   return true;
 }
 else {
   return false;
 }


$canCreate = $row['canCreate'];

if(userPermissions($canCreate)) { ...
Другие вопросы по тегам