I'm trying to setup some custom permissions for a Django application, but can't seem to get it working. The official documentation is a little scant, and doesn't mention (at least that I can find) how to actually set a permission? Based on a few 3rd party tutorials I found, I've extended the User class and it seems to work OK:
from django.db import models
from django.contrib.auth.models import User,UserManager
class CustomUser(User):
custom_field = models.CharField(max_length=250)
objects = UserManager()
class Meta:
permissions = (
('is_custom','Has a Custom Permission'),
)
When I try to set a permission however, it doesn't work:
>>> from project.custauth.models import CustomUser
>>> from django.contrib.auth.models import User, Permission
>>> user = CustomUser.objects.get(username='new.user')
>>> user
<CustomUser: new.user>
>>> custom_permission = Permission.objects.get(codename="is_custom")
>>> custom_permission
<Permission: custauth | custom user | Has a Custom Permission>
>>> custom_permission.save()
>>> user.user_permissions.add(custom_permission)
>>> user.save()
>>> user.has_perm(custom_permission)
False
>>> user.get_all_permissions()
set([])
Any ideas on what I'm doing wrong? I'm using Django 1.2.1 with Python 2.4.3. All input appreciated...
I tested your code (Python 2.6.2, Django 1.2.1) and everything worked as expected. Can you write a unit test to exercise the same code snippet?
On a side note user.has_perm(custom_permission)
will not return True
. Try user.has_perm('app.is_custom')
.
Update
Code snippet follows:
In [1]: from app.models import CustomUser
In [2]: from django.contrib.auth.models import User, Permission
In [3]: user = CustomUser.objects.get(username = 'new.user')
In [4]: custom_permission = Permission.objects.get(codename='is_custom')
In [5]: user.user_permissions.add(custom_permission)
In [6]: user.save()
In [7]: user.has_perm(custom_permission)
Out[7]: False
In [8]: user.has_perm('app.is_custom')
Out[8]: True
In [9]: user.get_all_permissions()
Out[9]: set([u'app.is_custom'])
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With