Проверьте разрешение пользователя в 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)) { ...