Compare commits

...

5 Commits

Author SHA1 Message Date
xinwen
9c9261e34d fix(orgs): 修复组织添加用户bug 2020-10-14 22:49:36 -05:00
xinwen
3353fbd06b fix(orgs): 组织添加成员bug 2020-10-14 06:13:15 -05:00
xinwen
628c034c53 feat(auth): sso 生成的地址重复访问的时候,重定向到用户指定的 next 地址 2020-10-08 22:23:27 -05:00
ibuler
8e6e8a0cbd fix: 修复资产列表有时的bug 2020-09-29 23:51:11 -05:00
xinwen
493e61aa34 fix(orgs): 用户修改组织角色报错 2020-09-29 23:46:45 -05:00
3 changed files with 24 additions and 9 deletions

View File

@@ -125,6 +125,8 @@ class TreeService(Tree):
def assets(self, nid): def assets(self, nid):
node = self.get_node(nid) node = self.get_node(nid)
if not node:
return set()
return node.data.get("assets", set()) return node.data.get("assets", set())
def valid_assets(self, nid): def valid_assets(self, nid):
@@ -132,6 +134,8 @@ class TreeService(Tree):
def all_assets(self, nid): def all_assets(self, nid):
node = self.get_node(nid) node = self.get_node(nid)
if not node:
return set()
if node.data is None: if node.data is None:
node.data = {} node.data = {}
all_assets = node.data.get("all_assets") all_assets = node.data.get("all_assets")

View File

@@ -73,12 +73,12 @@ class SSOViewSet(AuthMixin, JmsGenericViewSet):
token.save() token.save()
except (ValueError, SSOToken.DoesNotExist): except (ValueError, SSOToken.DoesNotExist):
self.send_auth_signal(success=False, reason='authkey_invalid') self.send_auth_signal(success=False, reason='authkey_invalid')
return HttpResponseRedirect(reverse('authentication:login')) return HttpResponseRedirect(next_url)
# 判断是否过期 # 判断是否过期
if (utcnow().timestamp() - token.date_created.timestamp()) > settings.AUTH_SSO_AUTHKEY_TTL: if (utcnow().timestamp() - token.date_created.timestamp()) > settings.AUTH_SSO_AUTHKEY_TTL:
self.send_auth_signal(success=False, reason='authkey_timeout') self.send_auth_signal(success=False, reason='authkey_timeout')
return HttpResponseRedirect(reverse('authentication:login')) return HttpResponseRedirect(next_url)
user = token.user user = token.user
login(self.request, user, 'authentication.backends.api.SSOAuthentication') login(self.request, user, 'authentication.backends.api.SSOAuthentication')

View File

@@ -1,5 +1,6 @@
import uuid import uuid
from functools import partial from functools import partial
from itertools import chain
from django.db import models from django.db import models
from django.db.models import signals from django.db.models import signals
@@ -229,6 +230,16 @@ def _none2list(*args):
return ([] if v is None else v for v in args) return ([] if v is None else v for v in args)
def _users2pks_if_need(users, admins, auditors):
pks = []
for user in chain(users, admins, auditors):
if hasattr(user, 'pk'):
pks.append(user.pk)
else:
pks.append(user)
return pks
class UserRoleMapper(dict): class UserRoleMapper(dict):
def __init__(self, container=set): def __init__(self, container=set):
super().__init__() super().__init__()
@@ -266,7 +277,7 @@ class OrgMemeberManager(models.Manager):
users, admins, auditors = _none2list(users, admins, auditors) users, admins, auditors = _none2list(users, admins, auditors)
send = partial(signals.m2m_changed.send, sender=self.model, instance=org, reverse=False, send = partial(signals.m2m_changed.send, sender=self.model, instance=org, reverse=False,
model=User, pk_set=[*users, *admins, *auditors], using=self.db) model=User, pk_set=_users2pks_if_need(users, admins, auditors), using=self.db)
send(action="pre_remove") send(action="pre_remove")
self.filter(org_id=org.id).filter( self.filter(org_id=org.id).filter(
@@ -290,14 +301,14 @@ class OrgMemeberManager(models.Manager):
) )
oms_add = [] oms_add = []
for users, role in add_mapper: for _users, _role in add_mapper:
for user in users: for _user in _users:
if isinstance(user, models.Model): if isinstance(_user, models.Model):
user = user.id _user = _user.id
oms_add.append(self.model(org_id=org.id, user_id=user, role=role)) oms_add.append(self.model(org_id=org.id, user_id=_user, role=_role))
send = partial(signals.m2m_changed.send, sender=self.model, instance=org, reverse=False, send = partial(signals.m2m_changed.send, sender=self.model, instance=org, reverse=False,
model=User, pk_set=[*users, *admins, *auditors], using=self.db) model=User, pk_set=_users2pks_if_need(users, admins, auditors), using=self.db)
send(action='pre_add') send(action='pre_add')
self.bulk_create(oms_add) self.bulk_create(oms_add)