permissões

Download Permissões

If you can't read please download the document

Upload: leandro-severino

Post on 16-Apr-2017

422 views

Category:

Technology


0 download

TRANSCRIPT

Permisses no Django

Uma pincelada no tema

Algumas definies

Por padro o Django vem com um sistema, uma app, de controle de autenticao e permisses:

django.contrib.auth

Algumas definies



O django.contrib.auth uma app plugvel que j vem habilitada por padro no arquivo de configuraes settings.py (na tupla de installed_apps)

Algumas definies


Essa app, alm de controlar a parte de login e o acesso ao admin padro do Django, tambm permite atribuir permisses por Usurio e por Grupo de Usurios as models das apps disponveis no admin (auth, sites e de suas apps que esto habilitadas na tupla de installed_apps no arquivo settings.py)

E como faz para testar ?


Para testar, acesse o admin com um usurio com atributos de Membro da Equipe (is_staff) e com Status de Super Usurio (is_superuser) e crie um novo usurio.

Ob: Este novo usurio que voc ir criar, precisar ter o atributo Membro da Equipe (is_staff) setado pois isso que caracteriza a capacidade de se logar no admin, mesmo que o Status de Super Usurio esteja atribuido.

As permisses


Por padro, o Django disponibiliza 3(trs) tipos de permisses padres para o acesso a uma model:

- can_change (pode modificar/alterar objetos daquela model.) - can_add (pode adicionar objetos naquela model.) - can_delete (pode deletar objetos daquela model.)

As permisses


Essas permisses podem ser atribuidas programaticamente, ou atravs do admin, para isso, basta editar no admin o usurio e atribuir as permisses em questo para a model especfica. Exemplo de atribuio de permisso programaticamente:

from minhaApp.models import MinhaModel

from django.contrib.auth.models import Group, Permission from django.contrib.contenttypes.models import ContentType

content_type = ContentType.objects.get_for_model(MinhaModel)

permission = Permission.objects.create(codename='can_change', name='Can Change', content_type=content_type)

As permisses


Ob: Tambm possivel criar novas permisses customizadas, setando uma tupla chamada permissions em uma MetaClass de sua Model, por exemplo:

class MinhaModel(models.Model): titulo = models.CharField(max_length=100) class Meta: permissions = ( ("pode_ver", "S pode ver"), )

As permisses


Ao acessar o objeto em questo pode-se verificar a existncia da permisso:

if user.has_perm('minhaApp.pode_ver'): # faz alguma coisa.
ou

if group.has_perm('minhaApp.pode_ver'): # faz alguma coisa.

As permisses


As permisses tambm podem ser checadas em funes(ou mtodos) das views:

from django.contrib.auth.decorators import permission_required @method_decorator(permission_required('minhaApp.pode_ver')) def meu_metodo(self, *args, **kwargs): # faz alguma coisa

As permisses


E tambm no template:

{% if perms.minhaApp.pode_ver %} Contedo que eu posso ver {% endif %}

As permisses

E quando o django sabe que existe estas permisses ?, quando ele carrega elas ? O segredo est no middleware da app django.contrib.auth

Este middleware est declarado no settings.py na tupla de MIDDLEWARE_CLASSES:

MIDDLEWARE_CLASSES = ( ..... 'django.contrib.auth.middleware.AuthenticationMiddleware', .....)

As permisses

Ao excutar este middleware o Django carrega todos os backends de permisso, que estiverem registrados na varivel AUTHENTICATION_BACKENDS (que uma tupla com o path completo para as classes que implementam os backends de permisso.)

Esta varivel est localizada no global_settings.py da instalao do django contendo o valor padro ('django.contrib.auth.backends.ModelBackend',). E aqui neste backend que a mgica de carregar as permisses acontece.

Esta varivel poder ser redefinida no settings.py do projeto no caso de voc querer utilizar por exemplo o django-guardian (uma app que possibilita a configurao de permisses por instncias de objetos e no somente por Models) mas o django-guardian assunto para a prxima conversa.

CLIQUE PARA EDITAR O FORMATO DO TEXTO DO TTULO

Clique para editar o formato do texto da estrutura de tpicos2. Nvel da estrutura de tpicos3. Nvel da estrutura de tpicos4. Nvel da estrutura de tpicos5. Nvel da estrutura de tpicos6. Nvel da estrutura de tpicos7. Nvel da estrutura de tpicos