Типичное приложение обычно имеет два уровня прав доступа: пользователя и администратора. Однако в некоторых приложениях необходим более сложный механизм управления доступом. Например, текстовые базы данных требуют множества уровней прав доступа.
-
Супервизор может изменять в системе все, что требуется, может модифицировать пользовательскую систему и т. д.
-
Редактор может редактировать статьи и другую информацию, а также утверждать тексты, предлагаемые авторами.
-
Автор может создавать статьи и другие виды текстов, вносить их на рассмотрение редакторов, но не может сам утверждать тексты;
-
Пользователь располагает лишь правами доступа для чтения.
Поскольку вы знаете текущего зарегистрированного пользователя и можете идентифицировать его по уникальной строке ($uid), то несложно написать функции, которые будут включать пользователя в определенную группу и предоставлять ему те или иные права доступа в зависимости от того, что это за группа. Библиотека PHPLib располагает встроенными функциями для выполнения этих действий.
Для того чтобы можно было работать с классом Perm, вы должны добавить еще один элемент к вызову функции page_open(). Библиотека PHPLib по умолчанию предоставляет реализацию класса Perm с именем Example_Perm. Но вы уже знаете, как следует поступить, чтобы можно было использовать все возможные функции, как привести систему в соответствие со своими потребностями, - необходимо создать собственный производный клаcс в файле local.inc.
В листинге 6.6 приведен пример использования класса Perm. Здесь реализовано несколько больше функциональных возможностей, чем действительно необходимо: наш класс позволяет выходить из системы и повторно входить в нее с другим именем пользователя (это позволяет более наглядно продемонстрировать механизм уровней прав доступа в действии); эталонный пользователь PHPLib (имя пользователя kris, пароль test) получает привилегии администратора (admin), и если вы войдете в систему под этим именем, сценарий выведет сообщение "Добро пожаловать, администратор". Поскольку в дистрибутиве библиотеки PHPLib задан единственный пользователь - администратор, - нужно создать и других пользователей, чтобы увидеть, как выглядит соответствующая страница для посетителей с иным уровнем доступа.
Листинг 6.6. Работа с классом Perm
-
page_open(array("sess" => " Example_Session", "auth" => "Example_Auth ", "perm" => "Example_Perm"));
-
if(isset($mode) && $mode == "reload")
-
{
-
$auth->unauth();
-
print("Вы успешно вышли из системы.
");
-
printf('Если хотите, вы можете войти повторно.',
-
е$sess->url(basename($PHP_SELF)));
-
}
-
else
-
{
-
if($perm->have_perm("admin"))
-
{
-
print("Добро пожаловать, администратор.
");
-
print('Вы вошли в систему с уровнем доступа "admin".
');
-
}
-
else
-
{
-
printf(Вы вошли в систему с уровнем доступа "%s".
',
-
е$auth->auth["perm"]);
-
}
-
printf("Ваше имя: $s
", $auth->auth["name"]);
-
printf('Log out',
-
е$sess->url(basename($PHP_SELF)."?mode=reload"));
-
}
-
page_close();