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.