2016-07-07 3 views
0

В иерархическом уровне организации, как предоставить разрешение на уровне департамента, поскольку данные о каждом сотруднике будут в одной таблице.Разрешение на django.

здесь S (Сотрудник) является базовой единицей всей организации. hierarchy of Employees

Теперь я хочу D отдел может видеть доступ, chagne только сотрудники, которые находятся под ними, аналогично для верхнего уровня, Может кто-нибудь сказать мне, как я должен начать?

+0

Это не очень хороший вопрос, так как здесь нет MVCE, и вы действительно задаете несколько вопросов - дизайн базы данных и пользовательские разрешения, по крайней мере, - я бы посмотрел на http: // stackoverflow.com/help/how-to-ask и посмотреть, можете ли вы отредактировать это соответствующим образом. – Withnail

ответ

0

Должно быть, это должно быть django?

Этот стиль стиля обхода больше похож на работу для пирамиды.

https://pypi.python.org/pypi/django-mptt кажется хорошей отправной точкой для вашей структуры дерева, но с системой разрешений вы на свой собственный

0

Давайте предположим, что пользовательский объект ваших менеджеров есть внешний ключ с именем блока на уровне, который они представляют (B1 , C3, ...)

Сначала вам нужен способ получить всех сотрудников, которые являются потомками. Как упоминалось в cleder, django-mptt облегчит вам жизнь. Просто запустите user.unit.get_leafnodes() с правильной настройкой mptt, и у вас есть весь ваш управляемый сотрудник.
См. MPTTModel.get_leaf_nodes.

Затем вам необходимо использовать эту информацию.

Если вы используете администратор django, вы можете использовать его в ModelAdmin.get_queryset. get_queryset принимает запрос в качестве аргумента. Просто войдите request.user, и вы снова на ногах. Затем вы можете заблокировать вещи немного больше с ModelAdmin.has_change_permission и семьей.

Если вы хотите большего контроля, взгляните на общие представления, основанные на классе. Ваш views.py может быть столь же простым, как:

from django.views import generic 
from .models import Employee 

class EmployeeList(generic.ListView): 
    def get_queryset(self): 
     return self.request.user.unit.get_leafnodes() 

class EmployeeCreate(generic.edit.CreateView): 
    fields = ["name"] 
    def get_queryset(self): 
     return self.request.user.unit.get_leafnodes() 

class EmployeeUpdate(generic.edit.UpdateView): 
    fields = ["name"] 
    def get_queryset(self): 
     return self.request.user.unit.get_leafnodes() 

Представления редактирования создаст ModelForm на основе объекта, возвращенного QuerySet. Атрибут полей требуется. См. Документ на generic views и those based on models forms.

+0

Хорошо, я прочитаю эти документы. Спасибо за информацию. Надеюсь, это также решит проблему разрешимости –

Смежные вопросы