TurboGears - Autorização e autenticação

Um aplicativo TurboGears é criado pelas opções de início rápido e aplicativo de configuração do kit de ferramentas da caixa de engrenagens, que tem o suporte de autorização e autenticação habilitado por padrão. Os modelos declarados em auth.py são configurados e inicializados de acordo com os valores atribuídos em bootstrap.py.

Os seguintes modelos são declarados em auth.py -

Modelo de Usuário

O modelo de usuário contém o design de uma tabela tg_user. Esta tabela é usada pelo pacote repose.who. Este pacote repose.who é uma biblioteca de autenticação poderosa e extensível para aplicativos WSGI. A estrutura de um modelo de usuário é a seguinte -

class User(DeclarativeBase):

"""
   __tablename__ = 'tg_user'
   
   user_id = Column(Integer, autoincrement = True, primary_key=True)
   user_name = Column(Unicode(16), unique = True, nullable = False)
   email_address = Column(Unicode(255), unique = True,nullable=False)
                                             
   display_name = Column(Unicode(255))
   _password = Column('password', Unicode(128))
   created = Column(DateTime, default = datetime.now)

Este modelo de grupo contém a tabela de definição tg_group. Sua definição é dada em auth.py da seguinte forma -

class Group(DeclarativeBase):
   __tablename__ = 'tg_group'
   
   group_id = Column(Integer, autoincrement = True,primary_key = True)
   group_name = Column(Unicode(16),unique = True,nullable = False)
   display_name = Column(Unicode(255))
   created = Column(DateTime, default = datetime.now)

Outra permissão de modelo também é configurada, que contém a definição de permissão.

class Permission(DeclarativeBase):
   __tablename__ = 'tg_permission'
   
   permission_id = Column(Integer,autoincrement = True,primary_key = True)
   permission_name = Column(Unicode(63), unique = True, nullable = False)
   description = Column(Unicode(255))

No momento da configuração dos modelos, os seguintes dados são adicionados a essas tabelas -

u = model.User()
u.user_name = 'manager'
u.display_name = 'Example manager'
u.email_address = '[email protected]'
u.password = 'managepass'

model.DBSession.add(u)
g = model.Group()
g.group_name = 'managers'
g.display_name = 'Managers Group'
g.users.append(u)

model.DBSession.add(g)
p = model.Permission()
p.permission_name = 'manage'
p.description = 'This permission gives an administrative right'
p.groups.append(g)

model.DBSession.add(p)
u1 = model.User()
u1.user_name = 'editor'
u1.display_name = 'Example editor'
u1.email_address = '[email protected]'
u1.password = 'editpass'

model.DBSession.add(u1)

Modelo Predicado

O módulo de predicados no pacote tg contém definições para verificadores de predicado. Um predicado é uma condição que deve ser atendida para que o usuário possa acessar a fonte solicitada. Tal predicado, ou condição, pode ser feito de mais predicados - esses são chamados de predicados compostos. Os controladores de ação, ou controladores, podem ter apenas um predicado, seja único ou composto.

Se um usuário não estiver logado, ou não tiver as permissões adequadas, este verificador de predicado lança um 401 (HTTP não autorizado), que é capturado pelo middleware repoze.who para exibir a página de login, permitindo que o usuário faça o login e redirecionando o usuário de volta à página apropriada quando terminar.

As diferentes condições ou predicados definidos no módulo tg.predicates são -

Sr. Não. Módulo tg.predicates e descrição
1

All

Verifique se todos os predicados especificados são atendidos

2

Any

Verifique se pelo menos um dos predicados especificados é atendido

3

is_user

Verifique se o nome de usuário do usuário autenticado é o especificado

4

in_group

Verifique se o usuário pertence ao grupo específico.

5

in_all_groups

Verifique se o usuário pertence a todos os grupos especificados.

6

in_any_group

Verifique se o usuário pertence a pelo menos um dos grupos especificados.

7

is_anonymous

Verifique se o usuário atual é anônimo.

8

has_permission

Verifique se o usuário atual possui a permissão especificada.

9

has_all_permissions

Verifique se o usuário atual recebeu todas as permissões especificadas.

10

has_any_permission

Verifique se o usuário tem pelo menos uma das permissões especificadas.

Por exemplo, se você tiver um predicado, que é grant access user belonging to customers group, então você pode usar o seguinte verificador de predicado integrado -

from tg.predicates import in_group
p in_group(‘customers’)

O seguinte verificador de predicado irá conceder acesso ao usuário 'root' ou qualquer pessoa com permissão de 'gerenciar' -

from tg.predicates import Any, is_user, has_permission
p = Any(is_user('root'), has_permission('manage'), 
   sg = 'Only administrators can remove blog posts')