|
@@ -132,6 +132,8 @@ class LoginView(TemplateView):
|
|
return response.json(tko.code)
|
|
return response.json(tko.code)
|
|
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
+
|
|
# 获取登录权限
|
|
# 获取登录权限
|
|
class GetPermissions(TemplateView):
|
|
class GetPermissions(TemplateView):
|
|
@method_decorator(csrf_exempt) # @csrf_exempt
|
|
@method_decorator(csrf_exempt) # @csrf_exempt
|
|
@@ -168,6 +170,11 @@ class GetPermissions(TemplateView):
|
|
userIconPath = userIconPath.replace('static/', '').replace('\\', '/')
|
|
userIconPath = userIconPath.replace('static/', '').replace('\\', '/')
|
|
userIconUrl = SERVER_DOMAIN + 'account/getAvatar/' + userIconPath
|
|
userIconUrl = SERVER_DOMAIN + 'account/getAvatar/' + userIconPath
|
|
|
|
|
|
|
|
+ role_qs = Role.objects.filter(device_user=userID)
|
|
|
|
+ menu_qs = MenuModel.objects.filter(role__in=role_qs,menutype=2);
|
|
|
|
+ perms = []
|
|
|
|
+ for menu in menu_qs:
|
|
|
|
+ perms.append(menu.menu_code)
|
|
res={
|
|
res={
|
|
"code": 200,
|
|
"code": 200,
|
|
"msg": "success",
|
|
"msg": "success",
|
|
@@ -175,7 +182,8 @@ class GetPermissions(TemplateView):
|
|
"roles": ["admin"], # 一个用户可包含多个角色如["admin","editor","XXXX"],必须返回,如小项目用不到角色权限请返回 ["admin"]
|
|
"roles": ["admin"], # 一个用户可包含多个角色如["admin","editor","XXXX"],必须返回,如小项目用不到角色权限请返回 ["admin"]
|
|
"ability": ["READ", "WRITE", "DELETE"], # 如果用不到rabc精细化权限可以不返回,建议返回
|
|
"ability": ["READ", "WRITE", "DELETE"], # 如果用不到rabc精细化权限可以不返回,建议返回
|
|
"username": username, # 用户名,必须返回
|
|
"username": username, # 用户名,必须返回
|
|
- "avatar": userIconUrl# 头像,必须返回
|
|
|
|
|
|
+ "avatar": userIconUrl,# 头像,必须返回
|
|
|
|
+ "perms": perms
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return response.json(0, res)
|
|
return response.json(0, res)
|
|
@@ -204,7 +212,7 @@ class GetList(TemplateView):
|
|
userID = tko.userID
|
|
userID = tko.userID
|
|
|
|
|
|
role_qs =Role.objects.filter(device_user=userID)
|
|
role_qs =Role.objects.filter(device_user=userID)
|
|
- menu_qs = MenuModel.objects.filter(parentId=0,role__in=role_qs);
|
|
|
|
|
|
+ menu_qs = MenuModel.objects.filter(parentId=0,role__in=role_qs,menutype=1);
|
|
list = []
|
|
list = []
|
|
i = 0
|
|
i = 0
|
|
for menu in menu_qs:
|
|
for menu in menu_qs:
|
|
@@ -232,7 +240,7 @@ class GetList(TemplateView):
|
|
}
|
|
}
|
|
}
|
|
}
|
|
)
|
|
)
|
|
- menu_qs = MenuModel.objects.filter(role__in=role_qs)
|
|
|
|
|
|
+ menu_qs = MenuModel.objects.filter(role__in=role_qs,menutype=1)
|
|
menulist = self.menulist(menu_qs, list)
|
|
menulist = self.menulist(menu_qs, list)
|
|
|
|
|
|
return response.json(0, {'list':menulist})
|
|
return response.json(0, {'list':menulist})
|
|
@@ -269,4 +277,151 @@ class GetList(TemplateView):
|
|
)
|
|
)
|
|
self.menulist(menu_qs,menulist['children'])
|
|
self.menulist(menu_qs,menulist['children'])
|
|
|
|
|
|
- return list
|
|
|
|
|
|
+ return list
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+class UserManagement(View):
|
|
|
|
+ def get(self, request, *args, **kwargs):
|
|
|
|
+ request.encoding = 'utf-8'
|
|
|
|
+ operation = kwargs.get('operation')
|
|
|
|
+ return self.validation(request.GET, request, operation)
|
|
|
|
+
|
|
|
|
+ def post(self, request, *args, **kwargs):
|
|
|
|
+ request.encoding = 'utf-8'
|
|
|
|
+ operation = kwargs.get('operation')
|
|
|
|
+ return self.validation(request.POST, request, operation)
|
|
|
|
+
|
|
|
|
+ def validation(self, request_dict, request, operation):
|
|
|
|
+ language = request_dict.get('language', 'en')
|
|
|
|
+ response = ResponseObject(language, 'pc')
|
|
|
|
+ if operation == '??':
|
|
|
|
+ return 0
|
|
|
|
+ else:
|
|
|
|
+ tko = TokenObject(request.META.get('HTTP_AUTHORIZATION'), returntpye='pc')
|
|
|
|
+ if tko.code != 0:
|
|
|
|
+ return response.json(tko.code)
|
|
|
|
+ response.lang = tko.lang
|
|
|
|
+ userID = tko.userID
|
|
|
|
+ if operation == 'getUserInfo':
|
|
|
|
+ return self.getUserInfo(userID, request_dict, response)
|
|
|
|
+ elif operation == 'AddOrEditAccount':
|
|
|
|
+ return self.AddOrEditAccount(userID, request_dict, response)
|
|
|
|
+ elif operation == 'doDelete':
|
|
|
|
+ return self.doDelete(userID, request_dict, response)
|
|
|
|
+ else:
|
|
|
|
+ return response.json(404)
|
|
|
|
+
|
|
|
|
+ def getUserInfo(self, userID, request_dict, response):
|
|
|
|
+ print('request_dict: ', request_dict)
|
|
|
|
+ username = request_dict.get('username', '').strip() # 移除字符串头尾的空格
|
|
|
|
+ pageNo = request_dict.get('pageNo', None)
|
|
|
|
+ pageSize = request_dict.get('pageSize', None)
|
|
|
|
+
|
|
|
|
+ if not all([pageNo, pageSize]):
|
|
|
|
+ return response.json(444)
|
|
|
|
+
|
|
|
|
+ page = int(pageNo)
|
|
|
|
+ line = int(pageSize)
|
|
|
|
+ try:
|
|
|
|
+ if username: # 查询
|
|
|
|
+ # 校验查询输入数据是否匹配用户名,手机或邮箱正则
|
|
|
|
+ dataValid = DataValid()
|
|
|
|
+ if not (dataValid.name_validate(username) or dataValid.mobile_validate(username) \
|
|
|
|
+ or dataValid.email_validate(username)):
|
|
|
|
+ return response.json(444)
|
|
|
|
+ device_user_qs = Device_User.objects.filter(username=username)
|
|
|
|
+ if not device_user_qs.exists():
|
|
|
|
+ device_user_qs = Device_User.objects.filter(phone=username)
|
|
|
|
+ if not device_user_qs.exists():
|
|
|
|
+ device_user_qs = Device_User.objects.filter(userEmail=username)
|
|
|
|
+ if not device_user_qs.exists():
|
|
|
|
+ return response.json(104)
|
|
|
|
+
|
|
|
|
+ else:
|
|
|
|
+ device_user_qs = Device_User.objects.filter().all() # 查询全部
|
|
|
|
+ count = device_user_qs.count()
|
|
|
|
+ device_users = device_user_qs[(page - 1) * line:page * line]
|
|
|
|
+ user_list = []
|
|
|
|
+ for device_user in device_users:
|
|
|
|
+ role = device_user.role.first()
|
|
|
|
+ rid = role.rid if role else 1 # 不存在角色默认分配为'Users'
|
|
|
|
+ user_list.append({
|
|
|
|
+ 'userID': device_user.userID,
|
|
|
|
+ 'username': device_user.username,
|
|
|
|
+ 'NickName': device_user.NickName,
|
|
|
|
+ 'role': Role.objects.get(rid=rid).roleName,
|
|
|
|
+ 'phone': device_user.phone,
|
|
|
|
+ 'userEmail': device_user.userEmail,
|
|
|
|
+ 'data_joined': device_user.data_joined.strftime("%Y-%m-%d %H:%M:%S"),
|
|
|
|
+ 'last_login': device_user.last_login.strftime("%Y-%m-%d %H:%M:%S"),
|
|
|
|
+ 'online': device_user.online,
|
|
|
|
+ })
|
|
|
|
+ print('user_list: ', user_list)
|
|
|
|
+ return response.json(0, {'list': user_list, 'total': count})
|
|
|
|
+ except Exception as e:
|
|
|
|
+ print(e)
|
|
|
|
+ return response.json(500, repr(e))
|
|
|
|
+
|
|
|
|
+ def AddOrEditAccount(self, userID, request_dict, response):
|
|
|
|
+ # 添加/编辑用户
|
|
|
|
+ print('request_dict: ', request_dict)
|
|
|
|
+ username = request_dict.get('username', '').strip() # 移除字符串头尾的空格
|
|
|
|
+ userEmail = request_dict.get('userEmail', '').strip()
|
|
|
|
+ roleName = request_dict.get('role', None)
|
|
|
|
+ password = request_dict.get('password', None)
|
|
|
|
+ isEdit = request_dict.get('isEdit', None)
|
|
|
|
+
|
|
|
|
+ if not all([username, userEmail, roleName, password]):
|
|
|
|
+ return response.json(444)
|
|
|
|
+
|
|
|
|
+ # 校验用户名,邮箱,密码是否符合规则
|
|
|
|
+ dataValid = DataValid()
|
|
|
|
+ if not dataValid.name_validate(username) or not dataValid.email_validate(userEmail) \
|
|
|
|
+ or not dataValid.password_validate(password):
|
|
|
|
+ return response.json(444)
|
|
|
|
+
|
|
|
|
+ try:
|
|
|
|
+ if isEdit: # 编辑用户信息
|
|
|
|
+ userID = request_dict.get('userID')
|
|
|
|
+ user_data = {
|
|
|
|
+ "username": username,
|
|
|
|
+ "NickName": username,
|
|
|
|
+ "userEmail": userEmail,
|
|
|
|
+ "password": make_password(password),
|
|
|
|
+ }
|
|
|
|
+ device_user_qs = Device_User.objects.filter(userID=userID)
|
|
|
|
+ device_user_qs.update(**user_data)
|
|
|
|
+
|
|
|
|
+ # 如果角色改变,修改用户角色
|
|
|
|
+ device_user_role = device_user_qs[0].role
|
|
|
|
+ user_role = device_user_role.first()
|
|
|
|
+ if not user_role or roleName != user_role.roleName:
|
|
|
|
+ device_user_role.clear()
|
|
|
|
+ role_qs = Role.objects.filter(roleName=roleName) # 账号角色
|
|
|
|
+ device_user_qs[0].role.set(role_qs)
|
|
|
|
+ else: # 添加用户
|
|
|
|
+ # 查询邮箱是否已注册
|
|
|
|
+ if Device_User.objects.filter(userEmail=userEmail).exists():
|
|
|
|
+ return response.json(103)
|
|
|
|
+ role_qs = Role.objects.filter(roleName=roleName) # 账号角色
|
|
|
|
+ # 创建用户
|
|
|
|
+ user_data = {
|
|
|
|
+ "username": username,
|
|
|
|
+ "NickName": username,
|
|
|
|
+ "userEmail": userEmail,
|
|
|
|
+ "password": make_password(password),
|
|
|
|
+ "userID": CommonService.getUserID(μs=False, setOTAID=True),
|
|
|
|
+ "is_active": True,
|
|
|
|
+ "user_isValid": True,
|
|
|
|
+ }
|
|
|
|
+ Device_User.objects.create(**user_data).role.set(role_qs)
|
|
|
|
+ return response.json(0)
|
|
|
|
+ except Exception as e:
|
|
|
|
+ print(e)
|
|
|
|
+ return response.json(500, repr(e))
|
|
|
|
+
|
|
|
|
+ def doDelete(self, userID, request_dict, response):
|
|
|
|
+ userID = request_dict.get('userID', '')
|
|
|
|
+ Device_User.objects.filter(userID=userID).delete()
|
|
|
|
+ return response.json(0)
|