такс, вот сейчас я проект в котором нужно реализовать систему прав доступа для модераторов
так вот и чтоб было проще я сделал небольшой класс для работы с правами доступа:
permissions.php
PHP:
<?php
class Permissions
{
private $code_file;
private $separator_character;
private $permissions;
private $permissions_code_array;
private $permissions_array;
public $error;
public $error_description;
function Permissions($code_file,$separator,$permissions)
{
$this->code_file=$code_file;
$this->separator_character=$separator;
$this->permissions=$permissions;
$this->parse_code();
$this->parse_permissions();
}
private function set_error($code,$description)
{
$this->error=$code;
$this->error_description=$description;
}
private function parse_code()
{
$code_array=file($this->code_file);
if(!$code_array)
$this->set_error(1,"Не возможно открыть файл с кодами прав доступа!");
else
{
$this->set_error(0,"");
foreach($code_array as $row)
{
$row=ltrim(rtrim($row));
$space_row=strpos($row," ");
if($space_row!=0)
$this->permissions_code_array[ltrim(rtrim(strtolower(substr($row,$space_row+1))))]=ltrim(rtrim(strtolower(substr($row,0,$space_row))));
}
}
}
private function parse_permissions()
{
$array=explode($this->separator_character,$this->permissions);
foreach($array as $code)
{
$this->permissions_array[$code]=1;
}
$this->set_error(0,"");
}
public function delete_permission($code)
{
$this->permissions_array[$code]=false;
$this->set_error(0,"");
}
public function create_permission($code)
{
$this->permissions_array[$code]=true;
$this->set_error(0,"");
}
public function parse_permissions_array()
{
$return_string="";
$i=0;
foreach($this->permissions_array as $code=>$param)
{
if($param)
{
if($i!=0)$return_string.=$this->separator_character;
$return_string.=$code;
$i++;
}
}
$this->set_error(0,"");
return $return_string;
}
function __call($name_permission,$parameters)
{
$name_permission=strtolower($name_permission);
$code=$this->permissions_code_array[$name_permission];
if($this->permissions_array[$code]) return true; else return false;
}
}
?>
permissions_code.txt
PHP:
0 CreateNewUser
1 EditMenu
2 EditTemplates
3 EditNews
4 EditLeftBlock
use_perm.php
PHP:
<?php
include permissions.php
$user_perm=new Permissions('permissions_code.txt',';','0;2;3');
echo $user_perm->parse_permissions_array()."<br>";
if($user_perm->CreateNeWUser())
{
echo "Вы можете создавать новый пользователей<br>";
}
$user_perm->delete_permission(0);
if(!$user_perm->CREATENewUser())
{
echo "Вы не имеете права создавать польльзователей<br>";
}
$user_perm->create_permission(4);
if($user_perm->editleftblock())
{
echo "Вы можете редактировать левый блок<br>";
}
echo $user_perm->parse_permissions_array();
?>
Вывод use_perm.php
PHP:
0;2;3
Вы можете создавать новый пользователей
Вы не имеете права создавать польльзователей
Вы можете редактировать левый блок
2;3;4
небольшие пояснения:
-работает только в PHP 5 так как в PHP 4 не было реализовано __call для классов
-для работы нужен файл в котором записано код-название прав доступа (permissions_code.txt), .txt для примера, это в ваших инетерсах - безопасность
, в строке один пробел-разделитель
-и так есть у нас файл с code-name правами доступа, в конструктор нужно передать "файл с code-name", "символ разделения", "права текущего юзера - в кодах"
-чтобы узнать есть право name у текущего пользователя - $екземпляр_класса->name() - true=есть_право, false=нету_права
-чтобы удалить право c кодом code - $екземпляр_класса->delete_permission(code);
-добавить новое право - $екземпляр_класса->create_permission(code);
-возвратить список прав после изменений - $екземпляр_класса->parse_permissions_array();
-регист букв в названии права рли не играет
-ошибки - $екземпляр_класса->error и $екземпляр_класса->error_description
над длинной названий функций надо еще поработать
могу добавить чтобы проверка права была не $екземпляр_класса->name(), а просто $екземпляр_класса->name
если что не понятно спрашивайте
критика приветствуется!!!