Return users that have permission "perm". By default, filter out inactive users and include superusers.
(self, perm, is_active=True, include_superusers=True, obj=None)
| 198 | ) |
| 199 | |
| 200 | def with_perm(self, perm, is_active=True, include_superusers=True, obj=None): |
| 201 | """ |
| 202 | Return users that have permission "perm". By default, filter out |
| 203 | inactive users and include superusers. |
| 204 | """ |
| 205 | if isinstance(perm, str): |
| 206 | try: |
| 207 | app_label, codename = perm.split(".") |
| 208 | except ValueError: |
| 209 | raise ValueError( |
| 210 | "Permission name should be in the form " |
| 211 | "app_label.permission_codename." |
| 212 | ) |
| 213 | elif not isinstance(perm, Permission): |
| 214 | raise TypeError( |
| 215 | "The `perm` argument must be a string or a permission instance." |
| 216 | ) |
| 217 | |
| 218 | if obj is not None: |
| 219 | return UserModel._default_manager.none() |
| 220 | |
| 221 | permission_q = Q(group__user=OuterRef("pk")) | Q(user=OuterRef("pk")) |
| 222 | if isinstance(perm, Permission): |
| 223 | permission_q &= Q(pk=perm.pk) |
| 224 | else: |
| 225 | permission_q &= Q(codename=codename, content_type__app_label=app_label) |
| 226 | |
| 227 | user_q = Exists(Permission.objects.filter(permission_q)) |
| 228 | if include_superusers: |
| 229 | user_q |= Q(is_superuser=True) |
| 230 | if is_active is not None: |
| 231 | user_q &= Q(is_active=is_active) |
| 232 | |
| 233 | return UserModel._default_manager.filter(user_q) |
| 234 | |
| 235 | def get_user(self, user_id): |
| 236 | try: |