Commit 670c8a6d authored by ibuler's avatar ibuler

[Bugfix] 修复唯一认证

parent 2ac5786b
This diff is collapsed.
...@@ -3,12 +3,15 @@ ...@@ -3,12 +3,15 @@
from werkzeug.local import Local from werkzeug.local import Local
from django.db import models from django.db import models
from django.utils.translation import ugettext_lazy as _
from django.db.models import Q from django.db.models import Q
from django.shortcuts import redirect from django.shortcuts import redirect
from django.forms import ModelForm from django.forms import ModelForm
from django.http.response import HttpResponseForbidden from django.http.response import HttpResponseForbidden
from django.core.exceptions import ValidationError
from common.utils import get_logger, is_uuid
from common.utils import get_logger
from .utils import current_org, set_current_org, set_to_root_org from .utils import current_org, set_current_org, set_to_root_org
from .models import Organization from .models import Organization
...@@ -26,15 +29,15 @@ class OrgManager(models.Manager): ...@@ -26,15 +29,15 @@ class OrgManager(models.Manager):
def get_queryset(self): def get_queryset(self):
queryset = super(OrgManager, self).get_queryset() queryset = super(OrgManager, self).get_queryset()
kwargs = {} kwargs = {}
if not hasattr(tl, 'times'): # if not hasattr(tl, 'times'):
tl.times = 0 # tl.times = 0
# logger.debug("[{}]>>>>>>>>>> Get query set".format(tl.times)) # logger.debug("[{}]>>>>>>>>>> Get query set".format(tl.times))
if not current_org: if not current_org:
kwargs['id'] = None kwargs['id'] = None
elif current_org.is_real(): elif current_org.is_real():
kwargs['org_id'] = current_org.id kwargs['org_id'] = current_org.id
elif current_org.is_default(): elif current_org.is_default():
queryset = queryset.filter(Q(org_id="") | Q(org_id__isnull=True)) queryset = queryset.filter(org_id="")
queryset = queryset.filter(**kwargs) queryset = queryset.filter(**kwargs)
tl.times += 1 tl.times += 1
return queryset return queryset
...@@ -73,7 +76,7 @@ class OrgManager(models.Manager): ...@@ -73,7 +76,7 @@ class OrgManager(models.Manager):
class OrgModelMixin(models.Model): class OrgModelMixin(models.Model):
org_id = models.CharField(max_length=36, null=True, blank=True, default=None) org_id = models.CharField(max_length=36, blank=True, default='', verbose_name=_("Organization"))
objects = OrgManager() objects = OrgManager()
sep = '@' sep = '@'
...@@ -120,6 +123,25 @@ class OrgModelMixin(models.Model): ...@@ -120,6 +123,25 @@ class OrgModelMixin(models.Model):
else: else:
return name return name
def validate_unique(self, exclude=None):
"""
Check unique constraints on the model and raise ValidationError if any
failed.
"""
self.org_id = current_org.id if current_org.is_real() else ''
if exclude and 'org_id' in exclude:
exclude.remove('org_id')
unique_checks, date_checks = self._get_unique_checks(exclude=exclude)
errors = self._perform_unique_checks(unique_checks)
date_errors = self._perform_date_checks(date_checks)
for k, v in date_errors.items():
errors.setdefault(k, []).extend(v)
if errors:
raise ValidationError(errors)
class Meta: class Meta:
abstract = True abstract = True
...@@ -157,4 +179,3 @@ class OrgModelForm(ModelForm): ...@@ -157,4 +179,3 @@ class OrgModelForm(ModelForm):
continue continue
model = field.queryset.model model = field.queryset.model
field.queryset = model.objects.all() field.queryset = model.objects.all()
...@@ -306,7 +306,7 @@ def user_limit_to(): ...@@ -306,7 +306,7 @@ def user_limit_to():
return {"orgs": current_org} return {"orgs": current_org}
class UserGroupForm(forms.ModelForm): class UserGroupForm(OrgModelForm):
users = forms.ModelMultipleChoiceField( users = forms.ModelMultipleChoiceField(
queryset=User.objects.exclude(role=User.ROLE_APP), queryset=User.objects.exclude(role=User.ROLE_APP),
label=_("User"), label=_("User"),
...@@ -342,7 +342,7 @@ class UserGroupForm(forms.ModelForm): ...@@ -342,7 +342,7 @@ class UserGroupForm(forms.ModelForm):
class Meta: class Meta:
model = UserGroup model = UserGroup
fields = [ fields = [
'name', 'users', 'comment' 'name', 'users', 'comment',
] ]
help_texts = { help_texts = {
'name': '* required' 'name': '* required'
......
...@@ -22,7 +22,7 @@ class UserGroup(OrgModelMixin): ...@@ -22,7 +22,7 @@ class UserGroup(OrgModelMixin):
class Meta: class Meta:
ordering = ['name'] ordering = ['name']
unique_together = [('org_id', 'name')] unique_together = [('org_id', 'name'),]
verbose_name = _("User group") verbose_name = _("User group")
@classmethod @classmethod
......
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