Curso web2py

Autorização de Usuários

É comum que precisemos de uma área específica da nossa aplicação para usuários com determinado nível de acesso superior. Por exemplo, queremos uma página de gerenciamento de usuários acessível somente para um usuário que é administrador. Por isso, precisamos definir níveis de autorização de usuários.

Groups

Para que possamos separar alguns usuários de outros, precisamos criar diferentes grupos para colocá-los. Isso pode ser feito da seguinte maneira:

auth.add_group('admin', 'pode fazer qualquer coisa')
auth.add_group('usuario', 'acesso restrito nas funções importantes')

Dessa forma, criamos dois grupos com suas respectivas descrições. Os grupos serão criados na tabela auth_groups e isso pode ser feito via appadmin ou inserção manual pelo código também.

Memberships

Para associar um usuário a um determinado grupo faremos uma relação entre os dois na tabela auth_membership:

auth.add_membership(id_grupo, id_usuario)

O que também pode ser feito pelo appadmin ou manualmente.

Permissions

Permissões são dadas para grupos para identificar aquilo que pode ou não ser feito por seus usuários:

auth.add_permission(id_grupo, 'tipo', 'objeto', id_registro)

Tanto tipo quanto objeto são definidos por você. Se o objeto for um nome de tabela, então a permissão pode se referir à tabela intera deixando o valor de id_registro como zero, ou ela pode se referir a um registro especificando a id do registro. Os tipos de permissão recomendados são create, read, update, delete e select, pois são entendidos pela maior parte das APIs CRUD.

Decorators

Para limitar páginas apenas a quem tem certo tipo de autorização ou condição, usamos decorators. Dessa forma, os decorators que limitam páginas para um grupo podem ser:

@auth.requires_login()
def index(): ...

@auth.requires_membership('admin')
def index(): ...

@auth.requires_permission('add', 'number')
def add(a,b):
    return a+b

def index():
    return add(5,2)