Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 17, 2010 17:36:24

LightOfMooN
От:
Зарегистрирован: 2010-09-11
Сообщения: 127
Репутация: +  0  -
Профиль   Отправить e-mail  

BB checkPermission

Попробовал на основе мануала и репозитория bbru сделать таки систему аутентификации.
Вроде даже что-то заработало.
Главный вопрос:
Требуется перенаправить админа после логина на админский скин.
Как в коде определить, имеет ли пользователь определённый пермишн или роль, или нет?
Вот такая глупость:

        principal = pau.authenticate(self.request)
interaction = zope.securitypolicy.zopepolicy.ZopeSecurityPolicy()
val = interaction.checkPermission('zope.Manage', principal)
почему-то всегда возвращает True.

Ну и дополнительные вопросы:
1. И в мануале, и в bbru есть код код, который собственно ставит PAU. Но как его запустить, если админ ещё не залогинился? (я про debug режим)
Хотелось бы как-то выполнять такой код на стадии построения приложения, но как? (всмысле куда его сунуть, чтоб он выполнялся к примеру, при buildout)
2. В мануале приводят шаблон loginform.pt, где есть поля login, password и кнопочка submit. Но нигде нет обработчика этой формы. Тогда как внести в систему информацию об аутентифицированном пользователе?
Я так понимаю, PAU съедает значения реквеста с формы с инпутов login и password. А если я изменю названия инпутов на другие? Всё рухнет? (или же к примеру, имеется встроенный чат, в котором своя авторизация через те же инпуты login и password, то получается, PAU их может перехватить и обработать и не дай бог авторизировать во всей системе, вместо её маленькой части)

P.S. есть желающие написать малюсенький мануальчик по-русски по авторизации в BB? :)



Офлайн

#2 Ноя. 17, 2010 19:00:28

LightOfMooN
От:
Зарегистрирован: 2010-09-11
Сообщения: 127
Репутация: +  0  -
Профиль   Отправить e-mail  

BB checkPermission

не понимаю
зарегистрировал стандартный вид:

<browser:defaultView
for="zope.security.interfaces.IUnauthorized"
layer="uralexpont.skin.interfaces.IUENTLayer"
name="index"
/>
+ вьюшку:
<browser:page
name="index"
for="zope.security.interfaces.IUnauthorized"
permission="zope.Public"
class=".login.Unauthorized"
layer="uralexpont.skin.interfaces.IUENTLayer"
/>
class Unauthorized(BrowserPage):

template = ViewPageTemplateFile('unauthorized.pt')

def __call__(self):
# Set the error status to 403 (Forbidden) in the case when we don't
# challenge the user
self.request.response.setStatus(403)

# make sure that squid does not keep the response in the cache
self.request.response.setHeader('Expires', 'Mon, 26 Jul 1997 05:00:00 GMT')
self.request.response.setHeader('Cache-Control', 'no-store, no-cache, must-revalidate')
self.request.response.setHeader('Pragma', 'no-cache')

principal = self.request.principal
auth = getUtility(IAuthentication)
auth.unauthorized(principal.id, self.request)
if self.request.response.getStatus() not in (302, 303):
return self.template()
Но вместо своего шаблона получаю какую-то стандартную форму логина Powered by Zope
Откуда что берётся, ппц..



Офлайн

#3 Дек. 8, 2010 13:19:42

LightOfMooN
От:
Зарегистрирован: 2010-09-11
Сообщения: 127
Репутация: +  0  -
Профиль   Отправить e-mail  

BB checkPermission

Пермишны проверяю так:

<span tal:condition="python: modules['zope.security.management'].checkPermission('PERMISSION_NAME', context)"></span>
Если кто-то знает более лаконичное решение, просьба сообщить.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version