mirror of
https://gitlab.com/allianceauth/allianceauth.git
synced 2025-07-12 14:00:17 +02:00
temp commit
This commit is contained in:
parent
7c14aede26
commit
bb87fdd958
@ -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
|
||||||
|
|
||||||
|
23
authentication/backends.py
Normal file
23
authentication/backends.py
Normal 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
|
@ -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)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user