You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

73 line
2.6 KiB

  1. from __future__ import unicode_literals
  2. import webnotes
  3. @webnotes.whitelist(allow_roles=["System Manager", "Administrator"])
  4. def get_roles_and_doctypes():
  5. return {
  6. "doctypes": [d[0] for d in webnotes.conn.sql("""select name from tabDocType where
  7. ifnull(istable,0)=0 and
  8. ifnull(issingle,0)=0 and
  9. name not in ('DocType')""")],
  10. "roles": [d[0] for d in webnotes.conn.sql("""select name from tabRole where name not in
  11. ('All', 'Guest', 'Administrator')""")]
  12. }
  13. @webnotes.whitelist(allow_roles=["System Manager", "Administrator"])
  14. def get_permissions(doctype=None, role=None):
  15. return webnotes.conn.sql("""select * from tabDocPerm
  16. where %s%s order by parent, permlevel, role""" % (\
  17. doctype and (" parent='%s'" % doctype) or "",
  18. role and ((doctype and " and " or "") + " role='%s'" % role) or "",
  19. ), as_dict=True)
  20. @webnotes.whitelist(allow_roles=["System Manager", "Administrator"])
  21. def remove(doctype, name):
  22. webnotes.conn.sql("""delete from tabDocPerm where name=%s""", name)
  23. validate_and_reset(doctype, for_remove=True)
  24. @webnotes.whitelist(allow_roles=["System Manager", "Administrator"])
  25. def add(parent, role, permlevel):
  26. webnotes.doc(fielddata={
  27. "doctype":"DocPerm",
  28. "__islocal": 1,
  29. "parent": parent,
  30. "parenttype": "DocType",
  31. "parentfield": "permissions",
  32. "role": role,
  33. "permlevel": permlevel,
  34. "read": 1
  35. }).save()
  36. validate_and_reset(parent)
  37. @webnotes.whitelist(allow_roles=["System Manager", "Administrator"])
  38. def update(name, doctype, ptype, value=0):
  39. webnotes.conn.sql("""update tabDocPerm set `%s`=%s where name=%s"""\
  40. % (ptype, '%s', '%s'), (value, name))
  41. validate_and_reset(doctype)
  42. @webnotes.whitelist(allow_roles=["System Manager", "Administrator"])
  43. def update_match(name, doctype, match=""):
  44. webnotes.conn.sql("""update tabDocPerm set `match`=%s where name=%s""",
  45. (match, name))
  46. validate_and_reset(doctype)
  47. def validate_and_reset(doctype, for_remove=False):
  48. from core.doctype.doctype.doctype import validate_permissions_for_doctype
  49. validate_permissions_for_doctype(doctype, for_remove)
  50. webnotes.clear_cache(doctype=doctype)
  51. @webnotes.whitelist(allow_roles=["System Manager", "Administrator"])
  52. def reset(doctype):
  53. webnotes.reset_perms(doctype)
  54. webnotes.clear_cache(doctype=doctype)
  55. @webnotes.whitelist(allow_roles=["System Manager", "Administrator"])
  56. def get_users_with_role(role):
  57. return [p[0] for p in webnotes.conn.sql("""select distinct tabProfile.name
  58. from tabUserRole, tabProfile where
  59. tabUserRole.role=%s
  60. and tabProfile.name != "Administrator"
  61. and tabUserRole.parent = tabProfile.name
  62. and ifnull(tabProfile.enabled,0)=1""", role)]