Monday, April 23, 2012

Updating custom permissions in a view

Does anyone know why create_permissions doesn't work (or throw any
errors) when used in a view, but works when I run the same code in the
manage.py shell?

###### views.py #######
from django.db.models import get_app
from django.contrib.auth.management import create_permissions
from django.http import HttpResponseRedirect
from django.contrib.admin.views.decorators import
staff_member_required

@staff_member_required
def update_permissions_view(request):
"""Updates the permissions of the app"""
app = get_app('edit_record')
create_permissions(app, None, 2)
referrer_url = request.META.get('HTTP_REFERER', None)
return HttpResponseRedirect(referrer_url)

###### models.py #######
import datetime, urllib2
from django.db import models
from django.conf import settings
from django.db.models import signals, get_app
from django.contrib.auth.models import User
from django.contrib.auth.management import create_permissions

def update_perms():
#Get Collection and Institution Permissions
coll_dict = eval(urllib2.urlopen(settings.VOCABULARIES
+'collections/py/').read())
inst_dict = eval(urllib2.urlopen(settings.VOCABULARIES
+'institutions/py/').read())
permissions = ()
for term in coll_dict['terms']:
created_perm = ('coll_'+term['name'], 'coll_'+term['name'],)
permissions += (created_perm,)
for term in inst_dict['terms']:
created_perm = ('inst_'+term['name'], 'inst_'+term['name'],)
permissions += (created_perm,)
#Add Metadata Editor and Metadata Publisher Permissions
permissions += (('metadata_editor', 'metadata_editor',),
('metadata_publisher', 'metadata_publisher',),)

return permissions

class Record(models.Model):
"""Defines the Record model """
STATUS_CHOICES = (
(0, 'Not Saved'),
(1, 'Saved'),
)

name = models.CharField(max_length=50, unique=True)
title = models.TextField()
data = models.TextField()
metadata_user = models.TextField()
metadata_save_date = models.DateTimeField(auto_now=True)
status = models.IntegerField(choices=STATUS_CHOICES)
hidden = models.BooleanField()

class Perms(models.Model):
class Meta:
permissions = update_perms()

def notify_admin(sender, instance, created, **kwargs):
'''Update permissions when a new user has been added.'''
if created:
app = get_app('edit_record')
create_permissions(app, None, 2)
signals.post_save.connect(notify_admin, sender=User)

--
You received this message because you are subscribed to the Google Groups "Django users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to django-users+unsubscribe@googlegroups.com.
For more options, visit this group at http://groups.google.com/group/django-users?hl=en.

No comments:

Post a Comment