Commit e40a3179 by James Tait

Override the UserOpenID save method and deal with the account_verified…

Override the UserOpenID save method and deal with the account_verified permission there, so it can be re-used by user and admin code.  Only update the UserOpenID if the value of account_verified has actually changed.
parent 11e16b6b
...@@ -67,14 +67,6 @@ class UserOpenIDAdmin(admin.ModelAdmin): ...@@ -67,14 +67,6 @@ 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:
obj.user.user_permissions.add(permission)
else:
obj.user.user_permissions.remove(permission)
obj.save()
def log_deletion(self, request, obj, object_repr): def log_deletion(self, request, obj, object_repr):
permission = Permission.objects.get(codename='account_verified') permission = Permission.objects.get(codename='account_verified')
if obj.user: if obj.user:
......
...@@ -316,18 +316,13 @@ class OpenIDBackend: ...@@ -316,18 +316,13 @@ class OpenIDBackend:
user.username = self._get_available_username(details['nickname'], openid_response.identity_url) user.username = self._get_available_username(details['nickname'], openid_response.identity_url)
updated = True updated = True
account_verified = details.get('account_verified', None) account_verified = details.get('account_verified', None)
if account_verified is not None: if (account_verified is not None and
permission = Permission.objects.get(codename='account_verified') user_openid.account_verified != account_verified):
user_openid.account_verified = account_verified user_openid.account_verified = account_verified
if account_verified: user_openid.save()
user.user_permissions.add(permission)
else:
user.user_permissions.remove(permission)
updated = True
if updated: if updated:
user.save() user.save()
user_openid.save()
def get_teams_mapping(self): def get_teams_mapping(self):
teams_mapping_auto = getattr(settings, 'OPENID_LAUNCHPAD_TEAMS_MAPPING_AUTO', False) teams_mapping_auto = getattr(settings, 'OPENID_LAUNCHPAD_TEAMS_MAPPING_AUTO', False)
......
...@@ -27,7 +27,10 @@ ...@@ -27,7 +27,10 @@
# ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
# POSSIBILITY OF SUCH DAMAGE. # POSSIBILITY OF SUCH DAMAGE.
from django.contrib.auth.models import User from django.contrib.auth.models import (
Permission,
User,
)
from django.db import models from django.db import models
...@@ -62,3 +65,13 @@ class UserOpenID(models.Model): ...@@ -62,3 +65,13 @@ class UserOpenID(models.Model):
permissions = ( permissions = (
('account_verified', 'The OpenID has been verified'), ('account_verified', 'The OpenID has been verified'),
) )
def save(self, force_insert=False, force_update=False, using=None):
permission = Permission.objects.get(codename='account_verified')
perm_label = '%s.%s' % (permission.content_type.app_label,
permission.codename)
if self.account_verified and not self.user.has_perm(perm_label):
self.user.user_permissions.add(permission)
elif not self.account_verified and self.user.has_perm(perm_label):
self.user.user_permissions.remove(permission)
super(UserOpenID, self).save(force_insert, force_update, using)
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