temp commit

This commit is contained in:
Adarnof 2017-02-27 18:34:16 -05:00
parent 7c14aede26
commit bb87fdd958
3 changed files with 87 additions and 2 deletions

View File

@ -4,8 +4,8 @@ from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from django.contrib.auth.models import User from django.contrib.auth.models import User
from django.utils.text import slugify from django.utils.text import slugify
from django import forms
from authentication.models import AuthServicesInfo from authentication.models import AuthServicesInfo, State, get_none_state
from eveonline.models import EveCharacter from eveonline.models import EveCharacter
from alliance_auth.hooks import get_hooks from alliance_auth.hooks import get_hooks
from services.hooks import ServicesHook from services.hooks import ServicesHook
@ -97,3 +97,31 @@ try:
admin.site.unregister(User) admin.site.unregister(User)
finally: finally:
admin.site.register(User, UserAdmin) admin.site.register(User, UserAdmin)
class StateForm(forms.ModelForm):
def _is_none_state(self):
instance = getattr(self, 'instance', None)
if instance and instance.pk:
return instance == get_none_state()
def __init__(self, *args, **kwargs):
super(StateForm, self).__init__(*args, **kwargs)
if _is_none_state():
self.fields['name'].widget.attrs['readonly'] = True
def clean_name(self):
if self._is_none_state():
return instance.name
return self.cleaned_data['name']
@admin.register(State)
class StateAdmin(admin.ModelAdmin):
form = StateForm
@staticmethod
def has_delete_permission(request, obj=None):
if obj == get_none_state():
return False

View File

@ -0,0 +1,23 @@
from django.contrib.auth.backends import ModelBackend
from django.contrib.auth.models import Permission
from authentication.models import UserProfile
class StateBackend(ModelBackend):
@staticmethod
def _get_state_permissions(user_obj):
profile_state_field = UserProfile._meta.get_field('state')
user_state_query = 'state__%s__user' % profile_state_field.related_query_name()
return Permission.objects.filter(**{user_state_query: user_obj})
def get_state_permission(self, user_obj, obj=None):
return self._get_permissions(user_obj, obj, 'state')
def get_all_permissions(self, user_obj, obj=None):
if not user_obj.is_active or user_obj.is_anonymous or obj is not None:
return set()
if not hasattr(user_obj, '_perm_cache'):
user_obj._perm_cache = self.get_user_permissions(user_obj)
user_obj._perm_cache.update(self.get_group_permissions(user_obj))
user_obj._perm_cache.update(self.get_state_permissions(user_obj))
return user_obj._perm_cache

View File

@ -3,6 +3,7 @@ from django.utils.encoding import python_2_unicode_compatible
from django.db import models from django.db import models
from django.contrib.auth.models import User from django.contrib.auth.models import User
from authentication.states import MEMBER_STATE, BLUE_STATE, NONE_STATE from authentication.states import MEMBER_STATE, BLUE_STATE, NONE_STATE
from eveonline.models import EveCharacter
@python_2_unicode_compatible @python_2_unicode_compatible
@ -22,3 +23,36 @@ class AuthServicesInfo(models.Model):
def __str__(self): def __str__(self):
return self.user.username + ' - AuthInfo' return self.user.username + ' - AuthInfo'
@python_2_unicode_compatible
class State(models.Model):
name = models.CharField(_('name'), max_length=20, unique=True)
permissions = models.ManyToManyField(
Permission,
verbose_name=_('permissions'),
blank=True,
)
priority = models.IntegerField(unique=True)
class Meta:
ordering = ['priority']
def __str__(self):
return self.name
def get_none_state():
return State.objects.get_or_create(name='None')[0]
@python_2_unicode_compatible
class UserProfile(models.Model):
class Meta:
default_permissions = ('change',)
user = models.OneToOneField(User, related_name='profile', on_delete=models.CASCADE)
main_character = models.ForeignKey(EveCharacter, on_delete=models.CASCADE)
state = models.ForeignKey(State, on_delete=models.SET(get_none_state))
owner_hash = models.CharField(max_length=28, unique=True)
owner_token = models.ForeignKey(Token, on_delete=models.SET_NULL)