Skip to content

Commit b5475af

Browse files
committed
adicionar exemplo com class based views
1 parent 1ecfe19 commit b5475af

1 file changed

Lines changed: 29 additions & 0 deletions

File tree

content/solucao-quase-definitiva-para-permissoes-em-projetos-django.md

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,35 @@ No exemplo acima, se o usuário tiver a permissão `pode_acessar_pagina_config`
5757

5858
Também é possível verificar se um usuário tem mais de uma permissão sem a necessidade de um `if` com vários `and`, através do método [`has_perms`](https://docs.djangoproject.com/en/dev/ref/contrib/auth/#django.contrib.auth.models.User.has_perms).
5959

60+
Caso você prefira class based views (assim como eu), as alterações são pequenas em relação ao exemplo acima. Por padrão todas as class based views tem uma propriedade chamada `request`, que podemos usar acessar o usuário logado e fazer as verificações de permissão.
61+
62+
```python
63+
from django.view.generic import TemplateView
64+
from django.core.exceptions import PermissionDenied
65+
66+
class ConfigView(TemplateView):
67+
template_name = 'config.html'
68+
69+
def render_to_responde(self):
70+
if not self.request.user.has_perm('global_permissions.pode_acessar_pagina_config'):
71+
raise PermissionDenied
72+
73+
# continuar com o restante do processamento...
74+
```
75+
76+
Ainda é possível deixar o código mais simples através do pacote [django-braces](https://github.com/brack3t/django-braces). Com ele temos acesso ao [`PermissionRequiredMixin`](http://django-braces.readthedocs.org/en/latest/access.html#permissionrequiredmixin), que automaticamente faz a verificação de permissão para nós.
77+
78+
```python
79+
from django.view.generic import TemplateView
80+
from brace.views import PermissionRequiredMixin
81+
82+
class ConfigView(PermissionRequiredMixin, TemplateView):
83+
template_name = 'config.html'
84+
permission_required = 'global_permissions.pode_acessar_pagina_config'
85+
```
86+
87+
Para mais informações sobre o django-braces, acesse sua [documentação oficial](http://django-braces.readthedocs.org/en/latest/index.html).
88+
6089
## Limitando o acesso nos templates
6190

6291
Limitar o acesso nos templates é tão simples quanto implementar nas views, mas diferentemente do primeiro, os templates já recebem automaticamente um objeto de permissões do usuário logado (desde que você utilize o *context processor* `django.contrib.auth.context_processors.auth`). Supondo que queiramos saber se o usuário pode visualizar um dado item do menu, podemos fazer da seguinte forma:

0 commit comments

Comments
 (0)