def execute(): docperm_meta = frappe.get_meta('DocPerm') for d in frappe.db.get_all('DocType', dict(istable=0, issingle=0, custom=0)): perms = frappe.get_all('DocPerm', fields='*', filters=dict(parent=d.name), order_by='idx asc') # get default perms try: standard_perms = get_standard_permissions(d.name) except (IOError, KeyError): # no json file, doctype no longer exists! continue same = True if len(standard_perms) != len(perms): same = False else: for i, p in enumerate(perms): standard = standard_perms[i] for fieldname in docperm_meta.get_fieldnames_with_value(): if p.get(fieldname) != standard.get(fieldname): same = False break if not same: break if not same: setup_custom_perms(d.name)
def setup_perms_for(doctype): perms = frappe.get_all("DocPerm", fields="*", filters=dict(parent=doctype), order_by="idx asc") # get default perms try: standard_perms = get_standard_permissions(doctype) except (IOError, KeyError): # no json file, doctype no longer exists! return same = True if len(standard_perms) != len(perms): same = False else: for i, p in enumerate(perms): standard = standard_perms[i] for fieldname in frappe.get_meta("DocPerm").get_fieldnames_with_value(): if p.get(fieldname) != standard.get(fieldname): same = False break if not same: break if not same: setup_custom_perms(doctype)
def setup_perms_for(doctype): perms = frappe.get_all('DocPerm', fields='*', filters=dict(parent=doctype), order_by='idx asc') # get default perms try: standard_perms = get_standard_permissions(doctype) except (IOError, KeyError): # no json file, doctype no longer exists! return same = True if len(standard_perms) != len(perms): same = False else: for i, p in enumerate(perms): standard = standard_perms[i] for fieldname in frappe.get_meta('DocPerm').get_fieldnames_with_value(): if p.get(fieldname) != standard.get(fieldname): same = False break if not same: break if not same: setup_custom_perms(doctype)
def remove(doctype, role, permlevel): frappe.only_for("System Manager") setup_custom_perms(doctype) name = frappe.get_value('Custom DocPerm', dict(parent=doctype, role=role, permlevel=permlevel)) frappe.db.sql('delete from `tabCustom DocPerm` where name=%s', name) if not frappe.get_all('Custom DocPerm', dict(parent=doctype)): frappe.throw(_('There must be atleast one permission rule.'), title=_('Cannot Remove')) validate_permissions_for_doctype(doctype, for_remove=True)
def remove(doctype, role, permlevel): frappe.only_for("System Manager") setup_custom_perms(doctype) name = frappe.get_value('Custom DocPerm', dict(parent=doctype, role=role, permlevel=permlevel)) frappe.db.sql('delete from `tabCustom DocPerm` where name=%s', name) if not frappe.get_all('Custom DocPerm', dict(parent=doctype)): frappe.throw(_('There must be atleast one permission rule.'), title=_('Cannot Remove')) validate_permissions_for_doctype(doctype, for_remove=True)
def remove(doctype, role, permlevel): frappe.only_for("System Manager") setup_custom_perms(doctype) frappe.db.delete("Custom DocPerm", { "parent": doctype, "role": role, "permlevel": permlevel }) if not frappe.get_all('Custom DocPerm', {"parent": doctype}): frappe.throw(_('There must be atleast one permission rule.'), title=_('Cannot Remove')) validate_permissions_for_doctype(doctype, for_remove=True, alert=True)
def add(parent, role, permlevel): frappe.only_for("System Manager") setup_custom_perms(parent) frappe.get_doc({ "doctype": "Custom DocPerm", "__islocal": 1, "parent": parent, "parenttype": "DocType", "parentfield": "permissions", "role": role, "permlevel": permlevel, "read": 1 }).save() validate_and_reset(parent)
def make_role_and_permissions(): role_name = 'Bank Payments Manager' try: role = frappe.new_doc('Role') role.update({'role_name': role_name, 'desk_access': 1}) role.save() except frappe.DuplicateEntryError: pass frappe.reload_doc('bank_integration', 'doctype', 'bank_integration_settings') setup_custom_perms('Bank Integration Settings') for doctype in ['Employee', 'Customer', 'Supplier', 'Payment Entry']: add_permission(doctype, role_name, 7) update_permission_property(doctype, role_name, 7, 'write', 1) frappe.db.commit()
def update(doctype, role, permlevel, ptype, value=None): frappe.only_for("System Manager") out = None if setup_custom_perms(doctype): out = 'refresh' name = frappe.get_value( 'Custom DocPerm', dict(parent=doctype, role=role, permlevel=permlevel)) frappe.db.sql("""update `tabCustom DocPerm` set `%s`=%s where name=%s"""\ % (frappe.db.escape(ptype), '%s', '%s'), (value, name)) validate_permissions_for_doctype(doctype) return out