0008-rbac-add-direct-parameter-to-parents-and-children-me.patch
src/django_rbac/managers.py | ||
---|---|---|
107 | 107 |
def for_user(self, user): |
108 | 108 |
return self.filter(members=user).parents().distinct() |
109 | 109 | |
110 |
def parents(self, include_self=True, annotate=False): |
|
111 |
qs = self.model.objects.filter( |
|
112 |
child_relation__deleted__isnull=True, |
|
113 |
child_relation__child__in=self, |
|
114 |
) |
|
110 |
def parents(self, include_self=True, annotate=False, direct=None): |
|
111 |
if direct is None: |
|
112 |
qs = self.model.objects.filter( |
|
113 |
child_relation__deleted__isnull=True, |
|
114 |
child_relation__child__in=self, |
|
115 |
) |
|
116 |
else: |
|
117 |
qs = self.model.objects.filter( |
|
118 |
child_relation__deleted__isnull=True, |
|
119 |
child_relation__child__in=self, |
|
120 |
child_relation__direct=direct, |
|
121 |
) |
|
115 | 122 |
if include_self: |
116 | 123 |
qs = self | qs |
117 | 124 |
qs = qs.distinct() |
... | ... | |
119 | 126 |
qs = qs.annotate(direct=models.Max(IntCast('child_relation__direct'))) |
120 | 127 |
return qs |
121 | 128 | |
122 |
def children(self, include_self=True, annotate=False): |
|
123 |
qs = self.model.objects.filter( |
|
124 |
parent_relation__deleted__isnull=True, |
|
125 |
parent_relation__parent__in=self, |
|
126 |
) |
|
129 |
def children(self, include_self=True, annotate=False, direct=None): |
|
130 |
if direct is None: |
|
131 |
qs = self.model.objects.filter( |
|
132 |
parent_relation__deleted__isnull=True, |
|
133 |
parent_relation__parent__in=self, |
|
134 |
) |
|
135 |
else: |
|
136 |
qs = self.model.objects.filter( |
|
137 |
parent_relation__deleted__isnull=True, |
|
138 |
parent_relation__parent__in=self, |
|
139 |
parent_relation__direct=direct, |
|
140 |
) |
|
127 | 141 |
if include_self: |
128 | 142 |
qs = self | qs |
129 | 143 |
qs = qs.distinct() |
src/django_rbac/models.py | ||
---|---|---|
209 | 209 |
RoleParenting = utils.get_role_parenting_model() |
210 | 210 |
RoleParenting.objects.soft_delete(parent, self) |
211 | 211 | |
212 |
def parents(self, include_self=True, annotate=False): |
|
213 |
return self.__class__.objects.filter(pk=self.pk).parents(include_self=include_self, annotate=annotate) |
|
212 |
def parents(self, include_self=True, annotate=False, direct=None): |
|
213 |
return self.__class__.objects.filter(pk=self.pk).parents( |
|
214 |
include_self=include_self, annotate=annotate, direct=None |
|
215 |
) |
|
214 | 216 | |
215 |
def children(self, include_self=True, annotate=False): |
|
217 |
def children(self, include_self=True, annotate=False, direct=None):
|
|
216 | 218 |
return self.__class__.objects.filter(pk=self.pk).children( |
217 |
include_self=include_self, annotate=annotate |
|
219 |
include_self=include_self, |
|
220 |
annotate=annotate, |
|
221 |
direct=direct, |
|
218 | 222 |
) |
219 | 223 | |
220 | 224 |
def all_members(self): |
221 |
- |