PermissionManager.py 38 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3. from itertools import chain
  4. from django.core import serializers
  5. from django.views.generic.base import View
  6. import django.dispatch, traceback
  7. from django.views.decorators.csrf import csrf_exempt
  8. from django.utils.decorators import method_decorator
  9. from Service.TokenManager import JSONTokenManager
  10. from Model.models import Permissions, Role, Device_User
  11. from Service.CommonService import CommonService
  12. from Service.ModelService import ModelService
  13. from Service.ResponseService import *
  14. # 创建信号
  15. roles_done = django.dispatch.Signal(providing_args=[])
  16. perms_done = django.dispatch.Signal(providing_args=[])
  17. rmanger_done = django.dispatch.Signal(providing_args=[])
  18. class Roles(object):
  19. '''
  20. role Manager Class
  21. '''
  22. try:
  23. rid = []
  24. rolename = []
  25. roles = Role.objects.all()
  26. for role in roles:
  27. rolename.append(role.roleName)
  28. rid.append(role.rid)
  29. except Exception as e:
  30. pass
  31. def __init__(self):
  32. '''
  33. 信号监听, 注册信号
  34. Signal.connect(receiver, sender=None, weak=True, dispatch_uid=None)
  35. receiver: 信号接受者,回调函数
  36. sender: 信号发送者
  37. '''
  38. roles_done.connect(self.callback)
  39. self.startSignal()
  40. def callback(self, sender, **kwargs):
  41. '''
  42. 开启监听之后,就要去实现回调函数了, 注册信号
  43. :param sender:
  44. :param kwargs:
  45. :return:
  46. '''
  47. Roles.rid = []
  48. Roles.rolename = []
  49. Roles.roles = Role.objects.all()
  50. for role in Roles.roles:
  51. Roles.rolename.append(role.roleName)
  52. Roles.rid.append(role.rid)
  53. def startSignal(self):
  54. '''
  55. 触发信号
  56. 指定信号发送者
  57. :return:
  58. '''
  59. roles_done.send(sender=self.__class__)
  60. def toJSON(self, QuerySets, fields=None, exclude=None):
  61. listSets = []
  62. for QuerySet in QuerySets:
  63. data = {}
  64. opts = QuerySet._meta
  65. for f in chain(opts.concrete_fields, opts.private_fields, opts.many_to_many):
  66. if not getattr(f, 'editable', False):
  67. continue
  68. if fields and f.name not in fields:
  69. continue
  70. if exclude and f.name in exclude:
  71. continue
  72. data[f.name] = f.value_from_object(QuerySet)
  73. listSets.append(data)
  74. return listSets
  75. def queryAllRoles(self, rolenames=None, exclude=None):
  76. roles =[]
  77. for role in chain(Roles.roles):
  78. if rolenames and role.roleName not in rolenames:
  79. continue
  80. if exclude and role.roleName in exclude:
  81. continue
  82. roles.append(role)
  83. if len(roles) > 0:
  84. resultDict=CommonService.query_set_to_dict(roles)
  85. for k, v in enumerate(resultDict["datas"]):
  86. if len(v['fields']['permission']) > 0:
  87. resultDict["datas"][k]['fields']['permissionJson']={}
  88. for pid in v['fields']['permission']:
  89. permission_query_set= Permissions.objects.get(id=pid)
  90. resultDict["datas"][k]['fields']['permissionJson'][pid]=permission_query_set.permName
  91. return ResponseFormal(0,resultDict)
  92. else:
  93. return ResponseFormal(0, {})
  94. def addRoles(self, content=None):
  95. try:
  96. roleContent = json.loads(content)
  97. except Exception as e:
  98. return ResponseFormal(803,repr(e))
  99. else:
  100. rid = roleContent.get('rid', None)
  101. if rid == None:
  102. return ResponseFormal(806)
  103. try:
  104. if rid in chain(Roles.rid):
  105. return ResponseFormal(807)
  106. permission_list = roleContent['permission']
  107. roleContent.pop('permission')
  108. role = Role(**roleContent)
  109. role.save()
  110. if len(permission_list) > 0:
  111. role.permission.add(*permission_list)
  112. except Exception as e:
  113. return ResponseFormal(808,repr(e))
  114. else:
  115. self.startSignal()
  116. return ResponseFormal(0)
  117. def delRoles(self, rid=None, rolename=None):
  118. if rid != None:
  119. if rid not in Roles.rid:
  120. return ResponseFormal(190)
  121. try:
  122. roletuple = Role.objects.filter(rid = rid).delete()
  123. except Exception as e:
  124. return ResponseFormal(192, repr(e))
  125. else:
  126. if roletuple[0] == 1:
  127. self.startSignal()
  128. return self.queryAllRoles()
  129. else:
  130. return ResponseFormal(193,{'error_msg':roletuple})
  131. elif rolename != None:
  132. if rid not in Roles.rolename:
  133. return ResponseFormal(191)
  134. try:
  135. roletuple = Role.objects.filter(roleName = rolename).delete()
  136. except Exception as e:
  137. return ResponseFormal(192)
  138. else:
  139. if roletuple[0] == 1:
  140. self.startSignal()
  141. return self.queryAllRoles()
  142. else:
  143. return ResponseFormal(193)
  144. def modifyRoles(self, rid=None, content=None):
  145. if rid not in Roles.rid:
  146. return ResponseFormal(190)
  147. try:
  148. roleContent = json.loads(content)
  149. except Exception as e:
  150. errorInfo = traceback.format_exc()
  151. print('The content parameter format is wrong: %s' % errorInfo)
  152. return ResponseFormal(803)
  153. else:
  154. try:
  155. permission_list = roleContent['permission']
  156. roleContent.pop('permission')
  157. roleCount = Role.objects.filter(rid = rid).update(**roleContent)
  158. if roleCount:
  159. if len(permission_list) > 0:
  160. Role.objects.get(rid=rid).permission.set(permission_list)
  161. else:
  162. Role.objects.get(rid=rid).permission.clear()
  163. except Exception as e:
  164. return ResponseFormal(194)
  165. else:
  166. if roleCount == 1:
  167. self.startSignal()
  168. return self.queryAllRoles()
  169. else:
  170. return ResponseFormal(195)
  171. class Permission(object):
  172. try:
  173. id = []
  174. permname = []
  175. perms = Permissions.objects.all()
  176. for perm in perms:
  177. id.append(perm.id)
  178. permname.append(perm.permName)
  179. except Exception as e:
  180. pass
  181. def __init__(self):
  182. perms_done.connect(self.callback)
  183. self.startSignal()
  184. def callback(self, sender, **kwargs):
  185. Permission.id = []
  186. Permission.permname = []
  187. Permission.roles = Permissions.objects.all()
  188. for perm in Permission.roles:
  189. Permission.id.append(perm.id)
  190. Permission.permname.append(perm.permName)
  191. def startSignal(self):
  192. perms_done.send(sender=self.__class__)
  193. def queryAllPerms(self, perms=None, exclude=None):
  194. opts =[]
  195. for perm in chain(Permission.permname):
  196. if perms and perm not in perms:
  197. continue
  198. if exclude and perm in exclude:
  199. continue
  200. opts.append(perm)
  201. return ResponseFormal(0,{'perms':opts})
  202. def queryAllPermsInfo(self, perms=None, exclude=None):
  203. sqlJSON = serializers.serialize('json', Permissions.objects.all())
  204. sqlList = json.loads(sqlJSON)
  205. sqlDict = dict(zip(["datas"], [sqlList]))
  206. return ResponseFormal(0,sqlDict)
  207. def addPerms(self, content=None):
  208. try:
  209. permContent = json.loads(content)
  210. except Exception as e:
  211. return ResponseFormal(803, repr(e))
  212. else:
  213. permname = permContent.get('permName', None)
  214. if permname == None:
  215. return ResponseFormal(806)
  216. if permname in chain(Permission.permname):
  217. return ResponseFormal(815)
  218. try:
  219. perm = Permissions(**permContent)
  220. perm.save()
  221. except Exception as e:
  222. return ResponseFormal(816, repr(e))
  223. else:
  224. self.startSignal()
  225. sqlJSON = serializers.serialize('json', [perm])
  226. sqlList = json.loads(sqlJSON)
  227. sqlDict = dict(zip(["datas"], [sqlList]))
  228. return ResponseFormal(0,sqlDict)
  229. def delPerms(self, id=None, permName=None):
  230. try:
  231. if id != None:
  232. perm = Permissions.objects.filter(id = id)
  233. elif permName != None:
  234. perm = Permissions.objects.filter(permName = permName)
  235. else:
  236. return ResponseFormal(800)
  237. except Exception as e:
  238. return ResponseFormal(500, repr(e))
  239. else:
  240. if not perm:
  241. return ResponseFormal(817)
  242. try:
  243. perm.delete()
  244. except Exception as e:
  245. return ResponseFormal(818, repr(e))
  246. else:
  247. self.startSignal()
  248. sqlJSON = serializers.serialize('json', Permissions.objects.all())
  249. sqlList = json.loads(sqlJSON)
  250. sqlDict = dict(zip(["datas"], [sqlList]))
  251. return ResponseFormal(0,sqlDict)
  252. def modifyPerm(self, id=None, content=None):
  253. if id not in Permission.id:
  254. return ResponseFormal(817)
  255. try:
  256. permContent = json.loads(content)
  257. except Exception as e:
  258. return ResponseFormal(803, repr(e))
  259. else:
  260. try:
  261. perm = Permissions.objects.filter(id = id).update(**permContent)
  262. except Exception as e:
  263. return ResponseFormal(819, repr(e))
  264. else:
  265. self.startSignal()
  266. sqlJSON = serializers.serialize('json', Permissions.objects.filter(id = id))
  267. sqlList = json.loads(sqlJSON)
  268. sqlDict = dict(zip(["datas"], [sqlList]))
  269. return ResponseFormal(0,sqlDict)
  270. @staticmethod
  271. def getAllPermission():
  272. send_dict=CommonService.query_set_to_dict(Permissions.objects.all())
  273. return ResponseFormal(0, send_dict)
  274. class rolesManager(object):
  275. def assign(self, userID=None, rid=None):
  276. dUser = Device_User.objects.filter(userID = userID)
  277. if not dUser:
  278. return ResponseFormal(113)
  279. role = Role.objects.filter(rid = rid)
  280. if not role:
  281. return ResponseFormal(190)
  282. rids = dUser[0].get_role_id()
  283. if rid in rids:
  284. return ResponseFormal(196)
  285. try:
  286. dUser[0].role.add(role[0])
  287. except Exception as e:
  288. return ResponseFormal(196, repr(e))
  289. else:
  290. rids = dUser[0].get_role_id()
  291. return ResponseFormal(0,{'rid':rids})
  292. def remove(self, userID=None, rid=None):
  293. dUser = Device_User.objects.filter(userID = userID)
  294. if not dUser:
  295. return ResponseFormal(113)
  296. rids = dUser[0].get_role_id()
  297. if rid not in rids:
  298. return ResponseFormal(198)
  299. try:
  300. dUser[0].role.remove(rid)
  301. except Exception as e:
  302. return ResponseFormal(199, repr(e))
  303. else:
  304. rids = dUser[0].get_role_id()
  305. if len(rids) == 0:
  306. urole = Role.objects.filter(roleName = 'Users')
  307. dUser[0].role.add(urole[0])
  308. rids = dUser[0].get_role_id()
  309. return ResponseFormal(0,{'rid':rids})
  310. def query(self, userID=None):
  311. dUser = Device_User.objects.filter(userID = userID)
  312. if not dUser:
  313. return ResponseFormal(113)
  314. sqlJSON = serializers.serialize('json', Role.objects.filter(device_user = userID))
  315. sqlList = json.loads(sqlJSON)
  316. sqlDict = dict(zip(["datas"], [sqlList]))
  317. return ResponseFormal(0, sqlDict)
  318. def queryAll(self):
  319. sqlJSON = serializers.serialize('json', Role.objects.all())
  320. sqlList = json.loads(sqlJSON)
  321. sqlDict = dict(zip(["datas"], [sqlList]))
  322. return ResponseFormal(0, sqlDict)
  323. class permManager(object):
  324. def queryUser(self, userID=None):
  325. dUser = Device_User.objects.filter(userID = userID)
  326. if not dUser:
  327. return ResponseFormal(190)
  328. sqlDict = dict(zip(['datas'], [dUser[0].get_all_permission()]))
  329. return ResponseFormal(0, sqlDict)
  330. def queryAllUser(self):
  331. sqlJSON = serializers.serialize('json', Device_User.objects.all())
  332. sqlList = json.loads(sqlJSON)
  333. sqlDict = dict(zip(['datas'], [sqlList]))
  334. return ResponseFormal(0, sqlDict)
  335. def queryRole(self, rid=None):
  336. role = Role.objects.filter(rid = rid)
  337. if not role:
  338. return ResponseFormal(190)
  339. sqlDict = dict(zip(["datas"], [role[0].get_all_permission()]))
  340. return ResponseFormal(0, sqlDict)
  341. def queryMoreRole(self, rid=None):
  342. role = Role.objects.filter(rid = rid)
  343. if not role:
  344. roleDict = {'rid': role[0].rid, 'error_msg': u'The rid does not exist!'}
  345. return roleDict
  346. roleDict = {'rid' : role[0].rid, 'perms': role[0].get_all_permission()}
  347. return roleDict
  348. def queryAllRole(self):
  349. sqlJSON = serializers.serialize('json', Role.objects.all())
  350. sqlList = json.loads(sqlJSON)
  351. sqlDict = dict(zip(["datas"], [sqlList]))
  352. return ResponseFormal(0, sqlDict)
  353. def assignUser(self, userID=None, perms=None):
  354. pids = []
  355. error_perms = []
  356. existence_perms = []
  357. dUser = Device_User.objects.filter(userID=userID)
  358. if not dUser:
  359. return ResponseFormal(113)
  360. for perm in perms:
  361. if perm in Permission.id:
  362. print('in', perm)
  363. continue
  364. else:
  365. print('not in', perm)
  366. error_perms.append(perm)
  367. perms.remove(perm)
  368. continue
  369. permsID = dUser[0].get_all_perms_id()
  370. for perm in perms:
  371. if perm not in permsID:
  372. pids.append(perm)
  373. else:
  374. existence_perms.append(perm)
  375. if len(pids) == 0:
  376. if len(error_perms) > 0:
  377. return ResponseFormal(201,{'error_perms': error_perms})
  378. elif len(existence_perms) > 0:
  379. return ResponseFormal(206,{'existence_perms': existence_perms})
  380. try:
  381. for pid in pids:
  382. dUser[0].permission.add(pid)
  383. except Exception as e:
  384. return ResponseFormal(200, repr(e))
  385. else:
  386. if len(error_perms) > 0:
  387. if len(existence_perms) > 0:
  388. return ResponseFormal(0,{'error_msg': 'Some of the permissions you provide have already existed,and some of the permissions do not exist!','error_perms': error_perms,'existence_perms': existence_perms,'perms': dUser[0].get_all_permission()})
  389. else:
  390. return ResponseFormal(0, {'error_msg': 'Some of the permissions you have provided do not exist!','error_perms':error_perms,'perms':dUser[0].get_all_permission()})
  391. else:
  392. if len(existence_perms) > 0:
  393. return ResponseFormal(0, {'error_msg': 'Some of the permissions you have provided do not exist!','error_perms':error_perms,'perms':dUser[0].get_all_permission()})
  394. else:
  395. return ResponseFormal(0, {'perms': dUser[0].get_all_permission()})
  396. def assignRole(self, rid=None, perms=None):
  397. pids = []
  398. error_perms = []
  399. existence_perms = []
  400. role = Role.objects.filter(rid = rid)
  401. if not role:
  402. return ResponseFormal(190)
  403. for perm in perms:
  404. if perm in Permission.id:
  405. continue
  406. else:
  407. error_perms.append(perm)
  408. perms.remove(perm)
  409. continue
  410. permsID = role[0].get_all_perms_id()
  411. for perm in perms:
  412. if perm not in permsID:
  413. pids.append(perm)
  414. else:
  415. existence_perms.append(perm)
  416. if len(pids) == 0:
  417. if len(error_perms) > 0:
  418. return ResponseFormal(201,{'error_perms': error_perms})
  419. elif len(existence_perms) > 0:
  420. return ResponseFormal(206,{'error_perms': existence_perms})
  421. try:
  422. for pid in pids:
  423. role[0].permission.add(pid)
  424. except Exception as e:
  425. return ResponseFormal(200, repr(e))
  426. else:
  427. if len(error_perms) > 0:
  428. return ResponseFormal(0, {'error_msg': 'Some of the permissions you have provided do not exist!','error_perms': error_perms,'perms': role[0].get_all_permission(),})
  429. else:
  430. if len(existence_perms) > 0:
  431. return ResponseFormal(206, {
  432. 'error_msg': 'Some of the permissions you have provided do not exist!',
  433. 'error_perms': existence_perms, 'perms': role[0].get_all_permission(), })
  434. else:
  435. return ResponseFormal(0, {'perms': role[0].get_all_permission()})
  436. def removeUser(self, userID=None, perms=None):
  437. '''
  438. 删除用户权限
  439. :param userID: 要删除的用户的用户ID
  440. :param perms: [],权限列表
  441. :return: 成功或者错误
  442. '''
  443. dUser = Device_User.objects.filter(userID=userID)
  444. if not dUser:
  445. return ResponseFormal(113)
  446. error_perms = []
  447. for perm in perms:
  448. if perm in Permission.id:
  449. continue
  450. else:
  451. error_perms.append(perm)
  452. perms.remove(perm)
  453. continue
  454. try:
  455. # user.user_permissions.remove(permission, permission, ...) 删除权限
  456. for perm in perms:
  457. dUser[0].permission.remove(perm)
  458. except Exception as e:
  459. return ResponseFormal(202,repr(e))
  460. else:
  461. if len(error_perms) > 0:
  462. return ResponseFormal(201, {
  463. 'error_msg': 'Some of the permissions you have provided do not exist!',
  464. 'error_perms': error_perms,
  465. 'perms': dUser[0].get_all_permission(),
  466. })
  467. else:
  468. return ResponseFormal(201, {'perms': dUser[0].get_all_permission()})
  469. def removeRole(self, rid=None, perms=None):
  470. role = Role.objects.filter(rid = rid)
  471. if not role:
  472. return ResponseFormal(190)
  473. error_perms = []
  474. for perm in perms:
  475. if perm in Permission.id:
  476. continue
  477. else:
  478. error_perms.append(perm)
  479. perms.remove(perm)
  480. continue
  481. try:
  482. # group.permissions.remove(permission, permission, ...)
  483. for perm in perms:
  484. role[0].permission.remove(perm)
  485. except Exception as e:
  486. return ResponseFormal(203,repr(e))
  487. else:
  488. if len(error_perms) > 0:
  489. return ResponseFormal(201, {
  490. 'error_msg': 'Some of the permissions you have provided do not exist!',
  491. 'error_perms': error_perms,
  492. 'perms': role[0].get_all_permission(),
  493. })
  494. else:
  495. return ResponseFormal(201, {'perms': role[0].get_all_permission()})
  496. def clearUser(self, userID=None):
  497. dUser = Device_User.objects.filter(userID=userID)
  498. if not dUser:
  499. return ResponseFormal(113)
  500. try:
  501. # user.user_permissions.clear() 清空权限
  502. dUser[0].permission.clear()
  503. except Exception as e:
  504. return ResponseFormal(204,repr(e))
  505. else:
  506. return ResponseFormal(0,{'perms': dUser[0].get_all_permission()})
  507. def clearRole(self, rid=None):
  508. role = Role.objects.filter(rid = rid)
  509. if not role:
  510. return ResponseFormal(190)
  511. try:
  512. role[0].permission.clear()
  513. except Exception as e:
  514. return ResponseFormal(205,repr(e))
  515. else:
  516. return ResponseFormal(0,{'perms': role[0].get_all_permission()})
  517. # 角色View
  518. class queryRoleView(View):
  519. @method_decorator(csrf_exempt)
  520. def dispatch(self, *args, **kwargs):
  521. return super(queryRoleView, self).dispatch(*args, **kwargs)
  522. def get(self, request, *args, **kwargs):
  523. request.encoding = 'gb2312'
  524. token = request.GET.get('token', None)
  525. return self.ValidationError(token)
  526. def post(self, request, *args, **kwargs):
  527. request.encoding = 'utf-8'
  528. token = request.POST.get('token', None)
  529. return self.ValidationError(token)
  530. def ValidationError(self, token):
  531. if token is not None:
  532. tM = JSONTokenManager()
  533. error_code = tM.verify_AToken(token)
  534. if error_code == 0:
  535. userID = tM.accessDict.get('userID', None)
  536. if userID:
  537. response = HttpResponse(self.queryUserRole(userID))
  538. return response
  539. else:
  540. return ResponseJSON(310)
  541. else:
  542. response = HttpResponse(tM.errorCodeInfo(error_code))
  543. return response
  544. else:
  545. return ResponseJSON(800)
  546. def queryUserRole(self, userID):
  547. eUser = Device_User.objects.filter(userID = userID)
  548. if not eUser:
  549. return ResponseFormal(102)
  550. if 100 in eUser[0].get_role_id():
  551. role = Roles()
  552. return role.queryAllRoles()
  553. own_permission = ModelService.check_permission(userID=userID, permID=30)
  554. if own_permission is True:
  555. role = Roles()
  556. return role.queryAllRoles()
  557. else:
  558. return ResponseFormal(603)
  559. class addNewRoleView(View):
  560. @method_decorator(csrf_exempt)
  561. def dispatch(self, *args, **kwargs):
  562. return super(addNewRoleView, self).dispatch(*args, **kwargs)
  563. def get(self, request, *args, **kwargs):
  564. request.encoding = 'gb2312'
  565. token = request.GET.get('token', None)
  566. content = request.GET.get('content', None)
  567. return self.ValidationError(token, content)
  568. def post(self, request, *args, **kwargs):
  569. request.encoding = 'utf-8'
  570. token = request.POST.get('token', None)
  571. content = request.POST.get('content', None)
  572. return self.ValidationError(token, content)
  573. def ValidationError(self, token, content):
  574. if token != None and content != None:
  575. tM = JSONTokenManager()
  576. error_code = tM.verify_AToken(token)
  577. if error_code == 0:
  578. userID = tM.accessDict.get('userID', None)
  579. if userID:
  580. response = HttpResponse(self.AddNewUserRole(userID, content))
  581. return response
  582. else:
  583. return ResponseJSON(310)
  584. else:
  585. response = HttpResponse(tM.errorCodeInfo(error_code))
  586. return response
  587. else:
  588. return ResponseJSON(800)
  589. def AddNewUserRole(self, userID, content):
  590. try:
  591. User = Device_User.objects.filter(userID = userID)
  592. except Exception as e:
  593. return ResponseFormal(500,repr(e))
  594. else:
  595. rids = User[0].get_role_id()
  596. if rids == None:
  597. return ResponseFormal(606)
  598. Aperms = False
  599. for rid in rids:
  600. if rid < 10:
  601. continue
  602. else:
  603. Aperms = True
  604. if Aperms:
  605. role = Roles()
  606. return role.addRoles(content)
  607. else:
  608. return ResponseFormal(607)
  609. class delRoleView(View):
  610. @method_decorator(csrf_exempt)
  611. def dispatch(self, *args, **kwargs):
  612. return super(delRoleView, self).dispatch(*args, **kwargs)
  613. def get(self, request, *args, **kwargs):
  614. request.encoding = 'gb2312'
  615. token = request.GET.get('token', None)
  616. rid = request.GET.get('rid', None)
  617. return self.ValidationError(token, rid)
  618. def post(self, request, *args, **kwargs):
  619. request.encoding = 'utf-8'
  620. token = request.POST.get('token', None)
  621. rid = request.POST.get('rid', None)
  622. return self.ValidationError(token, rid)
  623. def ValidationError(self, token, rid):
  624. if token != None and rid != None:
  625. tM = JSONTokenManager()
  626. error_code = tM.verify_AToken(token)
  627. if error_code == 0:
  628. userID = tM.accessDict.get('userID', None)
  629. if userID:
  630. response = HttpResponse(self.delRole(userID, int(rid)))
  631. return response
  632. else:
  633. return ResponseJSON(310)
  634. else:
  635. response = HttpResponse(tM.errorCodeInfo(error_code))
  636. return response
  637. def delRole(self, userID, rid):
  638. own_permission = ModelService.check_permission(userID=userID, permID=10)
  639. if own_permission is True:
  640. role = Roles()
  641. return role.delRoles(rid)
  642. else:
  643. return ResponseJSON(404)
  644. class modifyRoleView(View):
  645. @method_decorator(csrf_exempt)
  646. def dispatch(self, *args, **kwargs):
  647. return super(modifyRoleView, self).dispatch(*args, **kwargs)
  648. def get(self, request, *args, **kwargs):
  649. request.encoding = 'gb2312'
  650. token = request.GET.get('token', None)
  651. rid = request.GET.get('rid', None)
  652. content = request.GET.get('content', None)
  653. return self.ValidationError(token, rid, content)
  654. def post(self, request, *args, **kwargs):
  655. request.encoding = 'utf-8'
  656. token = request.POST.get('token', None)
  657. rid = request.POST.get('rid', None)
  658. content = request.POST.get('content', None)
  659. return self.ValidationError(token, rid, content)
  660. def ValidationError(self, token, rid, content):
  661. if token != None and content != None and rid != None:
  662. tM = JSONTokenManager()
  663. error_code = tM.verify_AToken(token)
  664. if error_code == 0:
  665. userID = tM.accessDict.get('userID', None)
  666. if userID:
  667. response = HttpResponse(self.modifyRole(userID, int(rid), content))
  668. return response
  669. else:
  670. return ResponseJSON(310)
  671. else:
  672. response = HttpResponse(tM.errorCodeInfo(error_code))
  673. return response
  674. else:
  675. return ResponseJSON(800)
  676. def modifyRole(self, userID, rid, content):
  677. try:
  678. User = Device_User.objects.filter(userID = userID)
  679. except Exception as e:
  680. return ResponseFormal(500, repr(e))
  681. else:
  682. rids = User[0].get_role_id()
  683. if rids == None:
  684. return ResponseFormal(606)
  685. Aperms = False
  686. for rrid in rids:
  687. if rrid < 10:
  688. continue
  689. else:
  690. Aperms = True
  691. if Aperms:
  692. role = Roles()
  693. return role.modifyRoles(rid, content)
  694. else:
  695. return ResponseFormal(607)
  696. # 权限View
  697. class addNewPermsView(View):
  698. @method_decorator(csrf_exempt)
  699. def dispatch(self, *args, **kwargs):
  700. return super(addNewPermsView, self).dispatch(*args, **kwargs)
  701. def get(self, request, *args, **kwargs):
  702. request.encoding = 'utf-8'
  703. request_dict = request.GET
  704. return self.ValidationError(request_dict)
  705. def post(self, request, *args, **kwargs):
  706. request.encoding = 'utf-8'
  707. request_dict = request.POST
  708. return self.ValidationError(request_dict)
  709. def ValidationError(self, request_dict):
  710. token = request_dict.get('token', None)
  711. type = request_dict.get('type', None)
  712. if token != None:
  713. tM = JSONTokenManager()
  714. error_code = tM.verify_AToken(token)
  715. if error_code == 0:
  716. userID = tM.accessDict.get('userID', None)
  717. if userID:
  718. if type == 'PC':
  719. return HttpResponse(self.addNewPermission(userID=userID, request_dict=request_dict))
  720. else:
  721. return ResponseJSON(310)
  722. else:
  723. return HttpResponse(tM.errorCodeInfo(error_code))
  724. else:
  725. return ResponseJSON(800)
  726. def addNewPermission(self, userID, request_dict):
  727. user_valid = Device_User.objects.filter(userID=userID).order_by('-data_joined')
  728. if user_valid:# 判断是否为超级管理员
  729. ModelService.check_permission(userID,40)
  730. if user_valid[0].is_superuser == 100 and user_valid[0].is_superuser != 1 and user_valid[0].is_superuser != 10:
  731. return ResponseFormal(600)
  732. else:
  733. add_dict = {'id':int(request_dict['id']),'permName':request_dict['permName'],'description':request_dict['description']}
  734. try:
  735. perm = Permissions(**add_dict)
  736. perm.save()
  737. except Exception as e:
  738. return ResponseFormal(816,repr(e))
  739. else:
  740. return Permission.getAllPermission()
  741. else:
  742. return ResponseFormal(113)
  743. class delPermsView(View):
  744. @method_decorator(csrf_exempt)
  745. def dispatch(self, *args, **kwargs):
  746. return super(delPermsView, self).dispatch(*args, **kwargs)
  747. def get(self, request, *args, **kwargs):
  748. request.encoding = 'utf-8'
  749. request_dict = request.GET
  750. return self.ValidationError(request_dict)
  751. def post(self, request, *args, **kwargs):
  752. request.encoding = 'utf-8'
  753. request_dict = request.POST
  754. return self.ValidationError(request_dict)
  755. def ValidationError(self, request_dict):
  756. token = request_dict.get('token', None)
  757. id = request_dict.get('id', None)
  758. if token != None and id != None:
  759. tM = JSONTokenManager()
  760. error_code = tM.verify_AToken(token)
  761. if error_code == 0:
  762. userID = tM.accessDict.get('userID', None)
  763. if userID:
  764. response = HttpResponse(self.delPerms(userID, id))
  765. return response
  766. else:
  767. return ResponseJSON(310)
  768. else:
  769. response = HttpResponse(tM.errorCodeInfo(error_code))
  770. return response
  771. else:
  772. return ResponseJSON(800)
  773. def delPerms(self, userID, id):
  774. try:
  775. User = Device_User.objects.filter(userID = userID)
  776. except Exception as e:
  777. return ResponseFormal(500, repr(e))
  778. else:
  779. rids = User[0].get_role_id()
  780. if len(rids) == 0:
  781. return ResponseFormal(606)
  782. Aperms = False
  783. for rid in rids:
  784. if rid < 10:
  785. continue
  786. else:
  787. Aperms = True
  788. if Aperms:
  789. perms = Permission()
  790. return perms.delPerms(id)
  791. else:
  792. return ResponseFormal(611)
  793. class queryPermsView(View):
  794. @method_decorator(csrf_exempt)
  795. def dispatch(self, *args, **kwargs):
  796. return super(queryPermsView, self).dispatch(*args, **kwargs)
  797. def get(self, request, *args, **kwargs):
  798. request.encoding = 'gb2312'
  799. token = request.GET.get('token', None)
  800. request_data = request.GET
  801. return self.ValidationError(token,request_data)
  802. def post(self, request, *args, **kwargs):
  803. request.encoding = 'utf-8'
  804. token = request.POST.get('token', None)
  805. request_data = request.POST
  806. return self.ValidationError(token,request_data)
  807. def ValidationError(self, token, request_data):
  808. if token != None:
  809. tM = JSONTokenManager()
  810. error_code = tM.verify_AToken(token)
  811. if error_code == 0:
  812. userID = tM.accessDict.get('userID', None)
  813. # userID = '151547867345163613800138001'
  814. if userID:
  815. type = request_data.get('type',None)
  816. if type == 'PC':
  817. response = HttpResponse(self.querAllPermission(userID))
  818. else:
  819. response = HttpResponse(self.delPerms(userID))
  820. return response
  821. else:
  822. return ResponseJSON(310)
  823. else:
  824. response = HttpResponse(tM.errorCodeInfo(error_code))
  825. return response
  826. else:
  827. return ResponseJSON(800)
  828. def querAllPermission(self, userID):
  829. permission_query_set=Permissions.objects.all()
  830. result_dict = CommonService.query_set_to_dict(permission_query_set)
  831. return ResponseJSON(0,result_dict)
  832. def delPerms(self, userID):
  833. try:
  834. User = Device_User.objects.filter(userID = userID)
  835. except Exception as e:
  836. return ResponseFormal(500, repr(e))
  837. else:
  838. rids = User[0].get_role_id()
  839. if len(rids) == 0:
  840. return ResponseFormal(606)
  841. Aperms = False
  842. for rid in rids:
  843. if rid < 10:
  844. continue
  845. else:
  846. Aperms = True
  847. if Aperms:
  848. perms = Permission()
  849. return perms.queryAllPerms()
  850. else:
  851. return ResponseFormal(611)
  852. class modifyPermsView(View):
  853. @method_decorator(csrf_exempt)
  854. def dispatch(self, *args, **kwargs):
  855. return super(modifyPermsView, self).dispatch(*args, **kwargs)
  856. def get(self, request, *args, **kwargs):
  857. request.encoding = 'gb2312'
  858. request_dict = request.GET
  859. return self.ValidationError(request_dict)
  860. def post(self, request, *args, **kwargs):
  861. request.encoding = 'utf-8'
  862. # token = request.POST.get('token', None)
  863. request_dict = request.POST
  864. return self.ValidationError(request_dict)
  865. def ValidationError(self, request_dict):
  866. token = request_dict.get('token', None)
  867. if token != None:
  868. tM = JSONTokenManager()
  869. error_code = tM.verify_AToken(token)
  870. if error_code == 0:
  871. userID = tM.accessDict.get('userID', None)
  872. if userID:
  873. update_dict = {'permName':request_dict['permName'],'description':request_dict['description']}
  874. response = HttpResponse(self.modifyPerms(userID=userID,id=request_dict['id'], update_dict=update_dict))
  875. return response
  876. else:
  877. return ResponseJSON(310)
  878. else:
  879. response = HttpResponse(tM.errorCodeInfo(error_code))
  880. return response
  881. else:
  882. return ResponseJSON(800)
  883. def modifyPerms(self, userID, id, update_dict):
  884. try:
  885. User = Device_User.objects.filter(userID = userID)
  886. except Exception as e:
  887. return ResponseFormal(500, repr(e))
  888. else:
  889. rids = User[0].get_role_id()
  890. if len(rids) == 0:
  891. return ResponseFormal(606)
  892. Aperms = False
  893. for rid in rids:
  894. if rid < 10:
  895. continue
  896. else:
  897. Aperms = True
  898. if Aperms:
  899. try:
  900. Permissions.objects.filter(id = int(id)).update(**update_dict)
  901. except Exception as e:
  902. return ResponseFormal(500,repr(e))
  903. else:
  904. return Permission.getAllPermission()
  905. else:
  906. return ResponseFormal(611)
  907. class queryRolePermsView(View):
  908. @method_decorator(csrf_exempt)
  909. def dispatch(self, *args, **kwargs):
  910. return super(queryRolePermsView, self).dispatch(*args, **kwargs)
  911. def get(self, request, *args, **kwargs):
  912. request.encoding = 'gb2312'
  913. token = request.GET.get('token', None)
  914. allUser = request.GET.get('allUser', False)
  915. return self.ValidationError(token, allUser)
  916. def post(self, request, *args, **kwargs):
  917. request.encoding = 'utf-8'
  918. token = request.POST.get('token', None)
  919. allUser = request.POST.get('allUser', False)
  920. return self.ValidationError(token, allUser)
  921. def ValidationError(self, token, allUser):
  922. if token != None:
  923. tM = JSONTokenManager()
  924. error_code = tM.verify_AToken(token)
  925. if error_code == 0:
  926. userID = tM.accessDict.get('userID', None)
  927. if userID:
  928. response = HttpResponse(self.queryRolePerms(userID, allUser))
  929. return response
  930. else:
  931. return ResponseJSON(310)
  932. else:
  933. response = HttpResponse(tM.errorCodeInfo(error_code))
  934. return response
  935. else:
  936. return ResponseJSON(800)
  937. def queryRolePerms(self, userID, allUser):
  938. try:
  939. dUser = Device_User.objects.filter(userID=userID).order_by('-data_joined')
  940. except Exception as e:
  941. return ResponseFormal(500, repr(e))
  942. else:
  943. if not dUser:
  944. return ResponseFormal(113)
  945. if allUser == '0' or allUser == 'False' or allUser == 'false':
  946. allUser = False
  947. elif allUser == '1' or allUser == 'True' or allUser == 'true':
  948. allUser = True
  949. else:
  950. allUser = False
  951. pM = permManager()
  952. if not allUser:
  953. ridslist =[]
  954. rids = dUser[0].get_role_id()
  955. for rid in rids:
  956. ridslist.append(pM.queryMoreRole(rid))
  957. sqlDict = dict(zip(["datas"], [ridslist]))
  958. return ResponseFormal(0,sqlDict)
  959. else:
  960. if 100 in dUser[0].get_role_id():
  961. return pM.queryAllRole()
  962. else:
  963. return ResponseFormal(612)