FastNetMon

Sunday 14 March 2010

Pylons: авторизация посредством AuthKit

Задачу с проверкой логина и пароля мы решили в прошлый раз, теперь хотелось бы в зависимости от логина пользователя давать или не давать ему доступ к определенным контроллерам. Действовать мы будем по мануалу: http://pylonsbook.com/en/1.1/authentication-and-authorization.html#the-authorization-decorator

Теперь открываем наш контроллер:
vi myapp/controllers/main.py


И в блок import ов добавляем следующее:

from authkit.authorize.pylons_adaptors import authorize
from authkit.permissions import RemoteUser, ValidAuthKitUser, UserIn


Теперь мы можем переписать контроллер private в более простом виде :
@authorize(RemoteUser())
def private(self):
return "You are authenticated!"


То есть в декораторе идет проверка является ли юзер залогиненым (установлено ли REMOTE_USER) и только после этого выполняет код метода. При этом в книге по Pylons крайне рекомендуется использовать ValidAuthKitUser() вместо RemoteUser(), так как второй просто проверяет не пустоту поля REMOTE_USER, но не убеждается, что это явно разрешенный в конфиге юзер. Как понимаете, ValidAuthKitUser более безопасен.

Теперь создадим контроллер, который будет доступен только пользователю admin2:

@authorize(UserIn(['admin2']))
def private2(self):
return "You are admin2!"


И если же попытаться войти на эту страницу от имени admin, то в ответ мы получим "403 Forbidden".

Кроме подключения авторизации через декораторы возможно ее использование как Middleware, подробно это описано вот здесь: http://pylonsbook.com/en/1.1/authentication-and-authorization.html#the-authorization-middleware

А вот так вот можно закрыть весь контроллер сразу (я крайне долго искал подобную фичу в Catalyst, но не нашел):

@authorize(ValidAuthKitUser())
def __before__(self):
pass


Ну вот, пожалуй, и хватит с авторизацией. Но замечу, что кроме описанных фич у AuthKit есть еще очень много всего вкусного, например, группы пользователей / роли (то есть можно гранулировано выдавать полномочия на те или иные подсистемы разным юзерам) / разрешения / поддержка OpenID а также искаробочная возможность привязывать юзеров только к определенным IP.

No comments :

Post a Comment

Note: only a member of this blog may post a comment.