Performance: Group-based permissions
This affects server response time and page load speed by controlling access logic before rendering content.
Jump into concepts and practice - no test required
if user.groups.filter(name='Editors').exists(): show_sensitive_content()
if user.has_perm('app.view_item') or user.has_perm('app.edit_item') or user.has_perm('app.delete_item'): show_sensitive_content()
| Pattern | DOM Operations | Reflows | Paint Cost | Verdict |
|---|---|---|---|---|
| Multiple individual permission checks | N/A (server-side) | N/A | N/A | [X] Bad |
| Single group membership check | N/A (server-side) | N/A | N/A | [OK] Good |
has_perm on the user object.user.has_perm('app_label.codename') is valid syntax.print(user.has_perm('blog.add_post')) output if the user belongs to a group with the 'add_post' permission?from django.contrib.auth.models import User, Group, Permission user = User.objects.create(username='alice') group = Group.objects.create(name='Editors') permission = Permission.objects.get(codename='add_post') group.permissions.add(permission) user.groups.add(group)
user.has_perm('blog.add_post') returns True.user = User.objects.get(username='bob')
group = Group.objects.get(name='Authors')
permission = Permission.objects.get(codename='change_article')
group.permissions.add(permission)
user.groups.add(group)
print(user.has_perm('app.change_article'))has_perm is 'app', which is likely incorrect.has_perm method requires the correct app label prefix matching the permission's app.get(codename=...). The app label is used only in has_perm checks.group.permissions.add() accepts multiple Permission objects; set() expects an iterable, not separate arguments.user.groups.add(group) correctly adds the user to the group.