• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Permissões
 

Permissões

on

  • 111 views

 

Statistics

Views

Total Views
111
Views on SlideShare
111
Embed Views
0

Actions

Likes
0
Downloads
0
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Permissões Permissões Presentation Transcript

    • Permissões no Django Uma pincelada no tema
    • Algumas definições Por padrão o Django vem com um sistema, uma app, de controle de autenticação e permissões: django.contrib.auth
    • Algumas definições O django.contrib.auth é uma app plugável que já vem habilitada por padrão no arquivo de configurações settings.py (na tupla de installed_apps)
    • Algumas definições Essa app, além de controlar a parte de login e o acesso ao admin padrão do Django, também permite atribuir permissões por Usuário e por Grupo de Usuários as models das apps disponíveis no admin (auth, sites e de suas apps que estão habilitadas na tupla de installed_apps no arquivo settings.py)
    • E como faz para testar ? Para testar, acesse o admin com um usuário com atributos de Membro da Equipe (is_staff) e com Status de Super Usuário (is_superuser) e crie um novo usuário. Ob: Este novo usuário 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 Usuário esteja atribuido.
    • As permissões Por padrão, o Django disponibiliza 3(três) tipos de permissões padrões 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 permissões Essas permissões podem ser atribuidas programaticamente, ou através do admin, para isso, basta editar no admin o usuário e atribuir as permissões em questão para a model específica. Exemplo de atribuição de permissão 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 permissões Ob: Também é possivel criar novas permissões 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 permissões Ao acessar o objeto em questão pode-se verificar a existência da permissão: if user.has_perm('minhaApp.pode_ver'): # faz alguma coisa. ou if group.has_perm('minhaApp.pode_ver'): # faz alguma coisa.
    • As permissões As permissões também podem ser checadas em funções(ou métodos) 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 permissões E também no template: {% if perms.minhaApp.pode_ver %} <div> Conteúdo que eu posso ver </div> {% endif %}
    • As permissões E quando o django sabe que existe estas permissões ?, 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 permissões Ao excutar este middleware o Django carrega todos os backends de permissão, que estiverem registrados na variável AUTHENTICATION_BACKENDS (que é uma tupla com o path completo para as classes que implementam os backends de permissão.) Esta variável está localizada no global_settings.py da instalação do django contendo o valor padrão ('django.contrib.auth.backends.ModelBackend',). E é aqui neste backend que a mágica de carregar as permissões acontece. Esta variável poderá ser redefinida no settings.py do projeto no caso de você querer utilizar por exemplo o django-guardian (uma app que possibilita a configuração de permissões por instâncias de objetos e não somente por Models) mas o djangoguardian é assunto para a próxima conversa.