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
Exemple #4
0
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
Exemple #5
0
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
Exemple #7
0
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