def get_doctypes_to_skip(doctype, user): ''' Returns doctypes to be skipped from user permission check''' doctypes_to_skip = [] valid_perms = get_user_valid_perms(user) or [] for perm in valid_perms: parent_doctype = perm.parent try: linked_doctypes = get_linked_doctypes(parent_doctype) child_doctypes = [d.options for d in frappe.get_meta(parent_doctype).get_table_fields()] for child_dt in child_doctypes: linked_doctypes += get_linked_doctypes(child_dt) if doctype not in linked_doctypes: continue except frappe.DoesNotExistError: # if doctype not found (may be due to rename) it should not be considered for skip continue if not cint(perm.apply_user_permissions): # add doctype to skip list if any of the perm does not apply user permission doctypes_to_skip.append(parent_doctype) elif parent_doctype not in doctypes_to_skip: user_permission_doctypes = get_user_permission_doctypes(perm) # "No doctypes present" indicates that user permission will be applied to each link field if not user_permission_doctypes: continue elif doctype in user_permission_doctypes: continue else: doctypes_to_skip.append(parent_doctype) # to remove possible duplicates doctypes_to_skip = list(set(doctypes_to_skip)) return doctypes_to_skip
def get_linked_doctypes(doctype): from frappe.permissions import get_linked_doctypes linked_doctypes = get_linked_doctypes(doctype) child_doctypes = [d.options for d in frappe.get_meta(doctype).get_table_fields()] for child_dt in child_doctypes: linked_doctypes += get_linked_doctypes(child_dt) return linked_doctypes
def get_linked_doctypes(doctype): from frappe.permissions import get_linked_doctypes linked_doctypes = get_linked_doctypes(doctype) child_doctypes = [d.options for d in frappe.get_meta(doctype).get_table_fields()] for child_dt in child_doctypes: linked_doctypes += get_linked_doctypes(child_dt) return linked_doctypes
def get_permissions(doctype=None, role=None): frappe.only_for("System Manager") if role: out = get_all_perms(role) if doctype: out = [p for p in out if p.parent == doctype] else: filters = dict(parent=doctype) if frappe.session.user != 'Administrator': custom_roles = frappe.get_all('Role', filters={'is_custom': 1}) filters['role'] = ['not in', [row.name for row in custom_roles]] out = frappe.get_all('Custom DocPerm', fields='*', filters=filters, order_by="permlevel") if not out: out = frappe.get_all('DocPerm', fields='*', filters=filters, order_by="permlevel") linked_doctypes = {} for d in out: if not d.parent in linked_doctypes: linked_doctypes[d.parent] = get_linked_doctypes(d.parent) d.linked_doctypes = linked_doctypes[d.parent] meta = frappe.get_meta(d.parent) if meta: d.is_submittable = meta.is_submittable d.in_create = meta.in_create return out
def get_permissions(doctype=None, role=None): frappe.only_for(("System Manager", "Local Admin")) if role: out = get_all_perms(role) if doctype: out = [p for p in out if p.parent == doctype] else: out = frappe.get_all('Custom DocPerm', fields='*', filters=dict(parent=doctype), order_by="permlevel") if not out: out = frappe.get_all('DocPerm', fields='*', filters=dict(parent=doctype), order_by="permlevel") linked_doctypes = {} for d in out: if not d.parent in linked_doctypes: linked_doctypes[d.parent] = get_linked_doctypes(d.parent) d.linked_doctypes = linked_doctypes[d.parent] meta = frappe.get_meta(d.parent) if meta: d.is_submittable = meta.is_submittable return out
def get_doctypes_to_skip(doctype, user): ''' Returns doctypes to be skipped from user permission check''' doctypes_to_skip = [] valid_perms = get_user_valid_perms(user) or [] for perm in valid_perms: parent_doctype = perm.parent try: linked_doctypes = get_linked_doctypes(parent_doctype) if doctype not in linked_doctypes: continue except frappe.DoesNotExistError: # if doctype not found (may be due to rename) it should not be considered for skip continue if not cint(perm.apply_user_permissions): # add doctype to skip list if any of the perm does not apply user permission doctypes_to_skip.append(parent_doctype) elif parent_doctype not in doctypes_to_skip: user_permission_doctypes = get_user_permission_doctypes(perm) # "No doctypes present" indicates that user permission will be applied to each link field if not user_permission_doctypes: continue elif doctype in user_permission_doctypes: continue else: doctypes_to_skip.append(parent_doctype) # to remove possible duplicates doctypes_to_skip = list(set(doctypes_to_skip)) return doctypes_to_skip
def get_permissions(doctype=None, role=None): frappe.only_for("System Manager") out = frappe.db.sql("""select * from tabDocPerm where %s%s order by parent, permlevel, role""" % (doctype and (" parent='%s'" % frappe.db.escape(doctype)) or "", role and ((doctype and " and " or "") + " role='%s'" % frappe.db.escape(role)) or ""), as_dict=True) linked_doctypes = {} for d in out: d.linked_doctypes = linked_doctypes.setdefault(d.parent, get_linked_doctypes(d.parent)) return out
def get_permissions(doctype=None, role=None): frappe.only_for("System Manager") out = frappe.db.sql("""select * from tabDocPerm where %s%s order by parent, permlevel, role""" % (doctype and (" parent='%s'" % frappe.db.escape(doctype)) or "", role and ((doctype and " and " or "") + " role='%s'" % frappe.db.escape(role)) or ""), as_dict=True) linked_doctypes = {} for d in out: d.linked_doctypes = linked_doctypes.setdefault(d.parent, get_linked_doctypes(d.parent)) return out
def get_permissions(doctype=None, role=None): frappe.only_for("System Manager") if role: out = get_all_perms(role) if doctype: out = [p for p in out if p.parent == doctype] else: out = frappe.get_all('Custom DocPerm', fields='*', filters=dict(parent = doctype), order_by="permlevel") if not out: out = frappe.get_all('DocPerm', fields='*', filters=dict(parent = doctype), order_by="permlevel") linked_doctypes = {} for d in out: if not d.parent in linked_doctypes: linked_doctypes[d.parent] = get_linked_doctypes(d.parent) d.linked_doctypes = linked_doctypes[d.parent] return out