You are on page 1of 13

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 plug!vel "ue j! vem habilitada por padro no ar"uivo de configuraes settings.py #na tupla de installed_apps$

Algumas definies

%ssa app, al m de controlar a parte de login e o acesso ao admin padro do Django, tamb m permite atribuir permisses por Usurio e por Grupo de Usurios as models das apps disponveis no admin #auth, sites e de suas apps "ue esto habilitadas na tupla de installed_apps no ar"uivo settings.py$

% como fa& para testar '

Para testar, acesse o admin com um usu!rio com atributos de Membro da Equipe (is_sta ! e com "tatus de "uper Usurio (is_superuser! e crie um novo usu!rio. Ob: %ste novo usu!rio "ue voc( ir! criar, precisar! ter o atributo Membro da Equipe (is_sta ! setado pois isso "ue caracteri&a a capacidade de se logar no admin, mesmo "ue o "tatus de "uper Usurio esteja atribuido.

As permisses

Por padro, o Django disponibili&a )#tr(s$ tipos de permiss#es padr#es para o acesso a uma model: * can_change #pode modificar+alterar objetos da"uela model.$ * can_add #pode adicionar objetos na"uela model.$ * can_delete #pode deletar objetos da"uela model.$

As permisses
%ssas permisses podem ser atribuidas programaticamente, ou atrav s do admin, para isso, basta editar no admin o usu!rio e atribuir as permisses em "uesto para a model espec,fica. %-emplo de atribuio de permisso programaticamente:
from minhaApp.models import .inha.odel from django.contrib.auth.models import /roup, Permission from django.contrib.contentt0pes.models import 1ontent20pe content3t0pe 4 1ontent20pe.objects.get3for3model#.inha.odel$ permission 4 Permission.objects.create#codename45can3change5, name451an 1hange5, content3t0pe4content3t0pe$

As permisses
Ob: 2amb m possivel criar novas permisses customi&adas, setando uma tupla chamada permissions em uma Meta$lass de sua .odel, por e-emplo:
class .inha.odel#models..odel$: titulo 4 models.1har6ield#ma-3length4788$ class .eta: permissions 4 # #9pode3ver9, 9:; pode ver9$, $

As permisses

Ao acessar o objeto em "uesto pode*se verificar a e-ist(ncia da permisso:

if user.has3perm#5minhaApp.pode3ver5$: < fa& alguma coisa. ou if group.has3perm#5minhaApp.pode3ver5$: < fa& alguma coisa.

As permisses

As permisses tamb m podem ser checadas em funes#ou m todos$ das vie=s:

from django.contrib.auth.decorators import permission3re"uired >method3decorator#permission3re"uired#5minhaApp.pode3ver5$$ def meu3metodo#self, ?args, ??@=args$: < fa& alguma coisa

As permisses

% tamb m no template:

AB if perms.minhaApp.pode3ver BC DdivE 1onteFdo "ue eu posso ver D+divE AB endif BC

As permisses
% "uando o django sabe "ue e-iste estas permisses ', "uando ele carrega elas ' O segredo est! no middle=are da app django.contrib.auth %ste middle=are est! declarado no settings.p0 na tupla de M%&&'E()*E_$')""E":

.GDDH%IAJ%31HA::%: 4 # ..... 5django.contrib.auth.middle=are.Authentication.iddle=are5, ..... $

As permisses

Ao e-cutar este middle=are o Django carrega todos os bac@ends de permisso, "ue estiverem registrados na vari!vel )U+,E-+%$)+%.-_/)$0E-&" #"ue uma tupla com o path completo para as classes "ue implementam os bac@ends de permisso.$ %sta vari!vel est! locali&ada no global_settings.py da instalao do django contendo o valor padro (1django.contrib.auth.bac2ends.Model/ac2end13! . % neste bac@end "ue a m!gica de carregar as permisses acontece. %sta vari!vel poder! ser redefinida no settings.py do projeto no caso de voc( "uerer utili&ar por e-emplo o django*guardian #uma app "ue possibilita a configurao de permisses por instKncias de objetos e no somente por .odels$ mas o django4 guardian assunto para a pr;-ima conversa. a"ui

You might also like