Web2py - Controle de Acesso

Autenticação

Quase todos os aplicativos precisam ser capazes de autenticar usuários e definir permissões. web2py vem com um controle de acesso baseado em funções extenso e personalizávelmechanism.web2py. Ele também suporta os protocolos, como CAS, OpenID, OAuth 1.0, LDAP, PAM, X509 e muitos mais.

web2py inclui um mecanismo conhecido como mecanismo de controle de acesso baseado em função (RBAC), que é uma abordagem para restringir o acesso do sistema a usuários autorizados. A classe web2py que implementa RBAC é chamada de Auth.

Observe o esquema fornecido a seguir.

Auth define as seguintes tabelas -

Sr. Não Nome e descrição da tabela
1

auth_user

armazena o nome, endereço de e-mail, senha e status dos usuários.

2

auth_group

armazena grupos ou funções para usuários em uma estrutura muitos para muitos

3

auth_membership

Armazena as informações de links de usuários e grupos em uma estrutura muitos para muitos

4

auth_permission

A tabela vincula grupos e permissões.

5

auth_event

registra alterações nas outras tabelas e acesso bem-sucedido

6

auth_cas

É usado para serviço de autenticação central

Personalizando Auth

Existem duas maneiras de personalizar o Auth.

  • Para definir um costume db.auth_user mesa do zero.

  • Deixe web2py definir o auth mesa.

Vejamos o último método de definir o authmesa. Nodb.py modelo, substitua a seguinte linha -

auth.define_tables()

Substitua-o pelo seguinte código -

auth.settings.extra_fields['auth_user'] = [
   Field('phone_number',requires = IS_MATCH('\d{3}\-\d{3}\-\d{4}')),
   Field('address','text')
]

auth.define_tables(username = True)

O pressuposto é que cada usuário consiste em número de telefone, nome de usuário e endereço.

auth.settings.extra_fieldsé um dicionário de campos extras. A chave é o nome da tabela auth à qual adicionar os campos extras. O valor é uma lista de campos extras. Aqui, adicionamos dois campos extras,phone_number and address.

usernametem que ser tratado de forma especial, pois está envolvido no processo de autenticação, que normalmente é baseado no campo email. Ao passar o argumento de nome de usuário para a linha seguinte, é informado ao web2py que queremos o campo de nome de usuário e queremos usá-lo para login em vez do campo de e-mail. Ele atua como uma chave primária.

auth.define_tables(username = True)

O nome de usuário é tratado como um valor único. Pode haver casos em que o registro ocorra fora do formulário de registro normal. Acontece também que o novo usuário é obrigado a fazer o login, para concluir o seu cadastro.

Isso pode ser feito usando um campo fictício, complete_registration que está definido para False por padrão, e é definido como True quando eles atualizam seu perfil.

auth.settings.extra_fields['auth_user'] = [
   Field('phone_number',requires = IS_MATCH('\d{3}\-\d{3}\-\d{4}'),
   comment = "i.e. 123-123-1234"),
   Field('address','text'),
   Field('complete_registration',default = False,update = True,
   writable = False, readable = False)
]

auth.define_tables(username = True)

Este cenário pode permitir que os novos usuários, no momento do login, concluam seu registro.

Dentro db.py, na pasta de modelos, podemos acrescentar o seguinte código -

if auth.user and not auth.user.complete_registration:
if not (request.controller,request.function) == ('default','user'):
   redirect(URL('default','user/profile'))

Isso forçará os novos usuários a editar seus perfis de acordo com os requisitos.

Autorização

É o processo de conceder algum acesso ou dar permissão de algo aos usuários.

No web2py, uma vez que o novo usuário é criado ou registrado, um novo grupo é criado para conter o usuário. A função do novo usuário é convencionalmente denominada como“user_[id]” onde id é a identificação única do usuário.

O valor padrão para a criação do novo grupo é -

auth.settings.create_user_groups = "user_%(id)s"

A criação de grupos entre os usuários pode ser desabilitada por -

auth.settings.create_user_groups = None

A criação, a concessão de acesso a membros e permissões específicos também podem ser alcançados de forma programática com a ajuda de appadmin.

Algumas das implementações são listadas a seguir -

Sr. Não Comando e Uso
1

auth.add_group('role', 'description')

retorna o id do grupo recém-criado.

2

auth.del_group(group_id)

Exclui o grupo com o id especificado

3

auth.del_group(auth.id_group('user_7'))

Exclui o grupo de usuários com a identificação fornecida.

4

auth.user_group(user_id)

Retorna o valor do id do grupo associado exclusivamente para um determinado usuário.

5

auth.add_membership(group_id, user_id)

Retorna o valor de user_id para o group_id fornecido

6

auth.del_membership(group_id, user_id)

Revoga o acesso do membro_id fornecido, ou seja, user_id do grupo fornecido.

7

auth.has_membership(group_id, user_id, role)

Verifica se user_id pertence a um determinado grupo.

Serviço de autenticação central (CAS)

O web2py fornece um padrão da indústria, a saber, Serviço de Autenticação de Cliente - CAS para cliente e servidor web2py integrado. É uma ferramenta de autenticação de terceiros.

É um protocolo aberto para autenticação distribuída. O funcionamento do CAS é o seguinte -

  • Se o usuário visita o site, o protocolo verifica se o usuário está autenticado.

  • Se o usuário não estiver autenticado no aplicativo, o protocolo redireciona para a página onde o usuário pode se registrar ou efetuar login no aplicativo.

  • Se o cadastro for concluído, o usuário receberá um e-mail. O registro não está concluído até e a menos que o usuário verifique o e-mail.

  • Após o registro bem-sucedido, o usuário é autenticado com a chave, que é usada pelo dispositivo CAS.

  • A chave é usada para obter as credenciais do usuário por meio de uma solicitação HTTP, que é definida em segundo plano.