Commit 340f84ad by James Tait

Checkpioint commit. This basically works with user.has_perm, but seems like the…

Checkpioint commit. This basically works with user.has_perm, but seems like the wrong way to do it.  Instead of implementing has_perm and get_all_permissions on the Backend, I think we should be setting that permission when the user's UserOpenID object is updated.
parent 5c2f42a8
...@@ -29,6 +29,7 @@ ...@@ -29,6 +29,7 @@
from django.conf import settings from django.conf import settings
from django.contrib import admin from django.contrib import admin
from django.contrib.auth.models import Permission
from django_openid_auth.models import Nonce, Association, UserOpenID from django_openid_auth.models import Nonce, Association, UserOpenID
from django_openid_auth.store import DjangoOpenIDStore from django_openid_auth.store import DjangoOpenIDStore
...@@ -66,6 +67,20 @@ class UserOpenIDAdmin(admin.ModelAdmin): ...@@ -66,6 +67,20 @@ class UserOpenIDAdmin(admin.ModelAdmin):
list_display = ('user', 'claimed_id') list_display = ('user', 'claimed_id')
search_fields = ('claimed_id',) search_fields = ('claimed_id',)
def save_model(self, request, obj, form, change):
permission = Permission.objects.get(codename='account_verified')
if obj.account_verified:
request.user.user_permissions.add(permission)
else:
request.user.user_permissions.remove(permission)
obj.save()
def log_deletion(self, request, obj, object_repr):
permission = Permission.objects.get(codename='account_verified')
if obj.user:
obj.user.user_permissions.remove(permission)
super(UserOpenIDAdmin, self).log_deletion(request, obj, object_repr)
admin.site.register(UserOpenID, UserOpenIDAdmin) admin.site.register(UserOpenID, UserOpenIDAdmin)
......
...@@ -33,7 +33,7 @@ __metaclass__ = type ...@@ -33,7 +33,7 @@ __metaclass__ = type
import re import re
from django.conf import settings from django.conf import settings
from django.contrib.auth.models import User, Group from django.contrib.auth.models import User, Group, Permission
from openid.consumer.consumer import SUCCESS from openid.consumer.consumer import SUCCESS
from openid.extensions import ax, sreg, pape from openid.extensions import ax, sreg, pape
...@@ -370,3 +370,16 @@ class OpenIDBackend: ...@@ -370,3 +370,16 @@ class OpenIDBackend:
user.save() user.save()
def has_perm(self, user_obj, perm, instance=None):
return perm in self.get_all_permissions(user_obj, instance)
def get_all_permissions(self, user_obj, instance=None):
try:
user_openid = UserOpenID.objects.get(user=user_obj)
except UserOpenID.DoesNotExist:
return set()
if user_openid.account_verified:
permission = Permission.objects.get(codename='account_verified')
return set(['%s.%s' % (permission.content_type.app_label,
permission.codename)])
return set()
...@@ -57,3 +57,8 @@ class UserOpenID(models.Model): ...@@ -57,3 +57,8 @@ class UserOpenID(models.Model):
claimed_id = models.TextField(max_length=2047, unique=True) claimed_id = models.TextField(max_length=2047, unique=True)
display_id = models.TextField(max_length=2047) display_id = models.TextField(max_length=2047)
account_verified = models.BooleanField(default=False) account_verified = models.BooleanField(default=False)
class Meta:
permissions = (
('account_verified', 'The OpenID has been verified'),
)
...@@ -1241,6 +1241,9 @@ class RelyingPartyTests(TestCase): ...@@ -1241,6 +1241,9 @@ class RelyingPartyTests(TestCase):
self.assertEquals(user.first_name, 'Firstname') self.assertEquals(user.first_name, 'Firstname')
self.assertEquals(user.last_name, 'Lastname') self.assertEquals(user.last_name, 'Lastname')
self.assertEquals(user.email, 'foo@example.com') self.assertEquals(user.email, 'foo@example.com')
# So have the user's permissions
self.assertEqual(
user.has_perm('django_openid_auth.account_verified'), is_verified)
# And the verified status of their UserOpenID # And the verified status of their UserOpenID
user_openid = UserOpenID.objects.get(user=user) user_openid = UserOpenID.objects.get(user=user)
self.assertEqual(user_openid.account_verified, is_verified) self.assertEqual(user_openid.account_verified, is_verified)
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment