Exemplo n.º 1
0
    def __init__(self, page_name):
        self.page_name = page_name
        self.extended_cards = []
        self.extended_charts = []
        self.extended_shortcuts = []

        self.user = frappe.get_user()
        self.allowed_modules = self.get_cached_value('user_allowed_modules',
                                                     self.get_allowed_modules)
        self.doc = self.get_page_for_user()

        if self.doc.module not in self.allowed_modules:
            raise frappe.PermissionError

        self.can_read = self.get_cached_value('user_perm_can_read',
                                              self.get_can_read_items)

        self.allowed_pages = get_allowed_pages(cache=True)
        self.allowed_reports = get_allowed_reports(cache=True)
        self.onboarding_doc = self.get_onboarding_doc()
        self.onboarding = None

        self.table_counts = get_table_with_counts()
        self.restricted_doctypes = frappe.cache().get_value(
            "domain_restricted_doctypes"
        ) or build_domain_restriced_doctype_cache()
        self.restricted_pages = frappe.cache().get_value(
            "domain_restricted_pages") or build_domain_restriced_page_cache()
Exemplo n.º 2
0
def apply_permissions(data):
    default_country = frappe.db.get_default("country")

    user = frappe.get_user()
    user.build_permissions()

    allowed_pages = get_allowed_pages()
    allowed_reports = get_allowed_reports()

    new_data = []
    for section in data:
        new_items = []

        for item in (section.get("items") or []):
            item = frappe._dict(item)

            if item.country and item.country != default_country:
                continue

            if ((item.type == "doctype" and item.name in user.can_read)
                    or (item.type == "page" and item.name in allowed_pages)
                    or (item.type == "report" and item.name in allowed_reports)
                    or item.type == "help"):

                new_items.append(item)

        if new_items:
            new_section = section.copy()
            new_section["items"] = new_items
            new_data.append(new_section)

    return new_data
Exemplo n.º 3
0
def get_permission_query_conditions(user):

    if not user:
        user = frappe.session.user

    if user == 'Administrator':
        return

    roles = frappe.get_roles(user)
    if "System Manager" in roles:
        return None

    allowed_doctypes = [
        '"%s"' % doctype
        for doctype in frappe.permissions.get_doctypes_with_read()
    ]
    allowed_reports = [
        '"%s"' % key if type(key) == str else key.encode('UTF8')
        for key in get_allowed_reports()
    ]

    return '''
			`tabDashboard Chart`.`document_type` in ({allowed_doctypes})
			or `tabDashboard Chart`.`report_name` in ({allowed_reports})
		'''.format(allowed_doctypes=','.join(allowed_doctypes),
             allowed_reports=','.join(allowed_reports))
Exemplo n.º 4
0
def apply_permissions(data):
	default_country = frappe.db.get_default("country")

	user = frappe.get_user()
	user.build_permissions()

	allowed_pages = get_allowed_pages()
	allowed_reports = get_allowed_reports()

	new_data = []
	for section in data:
		new_items = []

		for item in (section.get("items") or []):
			item = frappe._dict(item)

			if item.country and item.country!=default_country:
				continue

			if ((item.type=="doctype" and item.name in user.can_read)
				or (item.type=="page" and item.name in allowed_pages)
				or (item.type=="report" and item.name in allowed_reports)
				or item.type=="help"):

				new_items.append(item)

		if new_items:
			new_section = section.copy()
			new_section["items"] = new_items
			new_data.append(new_section)

	return new_data
Exemplo n.º 5
0
def get_permission_query_conditions(user):
    if not user:
        user = frappe.session.user

    if user == "Administrator":
        return

    roles = frappe.get_roles(user)
    if "System Manager" in roles:
        return None

    doctype_condition = False
    report_condition = False
    module_condition = False

    allowed_doctypes = [
        frappe.db.escape(doctype)
        for doctype in frappe.permissions.get_doctypes_with_read()
    ]
    allowed_reports = [
        frappe.db.escape(key) if type(key) == str else key.encode("UTF8")
        for key in get_allowed_reports()
    ]
    allowed_modules = [
        frappe.db.escape(module.get("module_name"))
        for module in get_modules_from_all_apps_for_user()
    ]

    if allowed_doctypes:
        doctype_condition = "`tabDashboard Chart`.`document_type` in ({allowed_doctypes})".format(
            allowed_doctypes=",".join(allowed_doctypes))
    if allowed_reports:
        report_condition = "`tabDashboard Chart`.`report_name` in ({allowed_reports})".format(
            allowed_reports=",".join(allowed_reports))
    if allowed_modules:
        module_condition = """`tabDashboard Chart`.`module` in ({allowed_modules})
			or `tabDashboard Chart`.`module` is NULL""".format(
            allowed_modules=",".join(allowed_modules))

    return """
		((`tabDashboard Chart`.`chart_type` in ('Count', 'Sum', 'Average')
		and {doctype_condition})
		or
		(`tabDashboard Chart`.`chart_type` = 'Report'
		and {report_condition}))
		and
		({module_condition})
	""".format(
        doctype_condition=doctype_condition,
        report_condition=report_condition,
        module_condition=module_condition,
    )
Exemplo n.º 6
0
def has_permission(doc, ptype, user):
	roles = frappe.get_roles(user)
	if "System Manager" in roles:
		return True


	if doc.chart_type == 'Report':
		allowed_reports = [key if type(key) == str else key.encode('UTF8') for key in get_allowed_reports()]
		if doc.report_name in allowed_reports:
			return True
	else:
		allowed_doctypes = [frappe.permissions.get_doctypes_with_read()]
		if doc.document_type in allowed_doctypes:
			return True

	return False
Exemplo n.º 7
0
    def __init__(self, page, minimal=False):
        self.page_name = page.get('name')
        self.page_title = page.get('title')
        self.public_page = page.get('public')
        self.extended_links = []
        self.extended_charts = []
        self.extended_shortcuts = []
        self.workspace_manager = "Workspace Manager" in frappe.get_roles()

        self.user = frappe.get_user()
        self.allowed_modules = self.get_cached('user_allowed_modules',
                                               self.get_allowed_modules)

        self.doc = frappe.get_cached_doc("Workspace", self.page_name)

        if self.doc and self.doc.module and self.doc.module not in self.allowed_modules and not self.workspace_manager:
            raise frappe.PermissionError

        self.can_read = self.get_cached('user_perm_can_read',
                                        self.get_can_read_items)

        self.allowed_pages = get_allowed_pages(cache=True)
        self.allowed_reports = get_allowed_reports(cache=True)

        if not minimal:
            if self.doc.content:
                self.onboarding_list = [
                    x['data']['onboarding_name']
                    for x in loads(self.doc.content)
                    if x['type'] == 'onboarding'
                ]
            self.onboardings = []

            self.table_counts = get_table_with_counts()
        self.restricted_doctypes = frappe.cache().get_value(
            "domain_restricted_doctypes"
        ) or build_domain_restriced_doctype_cache()
        self.restricted_pages = frappe.cache().get_value(
            "domain_restricted_pages") or build_domain_restriced_page_cache()
Exemplo n.º 8
0
def get_permission_query_conditions(user):

    if not user:
        user = frappe.session.user

    if user == 'Administrator':
        return

    roles = frappe.get_roles(user)
    if "System Manager" in roles:
        return None

    doctype_condition = False
    report_condition = False

    allowed_doctypes = [
        frappe.db.escape(doctype)
        for doctype in frappe.permissions.get_doctypes_with_read()
    ]
    allowed_reports = [
        frappe.db.escape(key) if isinstance(key, str) else key.encode('UTF8')
        for key in get_allowed_reports()
    ]

    if allowed_doctypes:
        doctype_condition = '`tabDashboard Chart`.`document_type` in ({allowed_doctypes})'.format(
            allowed_doctypes=','.join(allowed_doctypes))
    if allowed_reports:
        report_condition = '`tabDashboard Chart`.`report_name` in ({allowed_reports})'.format(
            allowed_reports=','.join(allowed_reports))

    return '''
			(`tabDashboard Chart`.`chart_type` in ('Count', 'Sum', 'Average')
			and {doctype_condition})
			or
			(`tabDashboard Chart`.`chart_type` = 'Report'
			and {report_condition})
		'''.format(doctype_condition=doctype_condition,
             report_condition=report_condition)
Exemplo n.º 9
0
 def get_all_reports(self):
     return get_allowed_reports()
Exemplo n.º 10
0
	def get_all_reports(self):
		return get_allowed_reports()