Files
arrr-erp/app/modules/core/rbac/ui_permissions.py
T
2026-06-20 15:01:44 +05:30

494 lines
24 KiB
Python

from __future__ import annotations
from app.modules.core.rbac.permissions_registry import expand_permission_codes
def _has(permissions: list[str] | None, code: str) -> bool:
granted = set(permissions or [])
for candidate in expand_permission_codes(code):
if candidate in granted:
return True
return False
def _roles(role_names: list[str] | None) -> set[str]:
return set(role_names or [])
def is_system_admin(role_names: list[str] | None = None) -> bool:
return "System Admin" in _roles(role_names)
def is_firm_admin(role_names: list[str] | None = None) -> bool:
return "Firm Admin" in _roles(role_names)
def can_view_own_alerts(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "alerts.view_self") or bool(user)
def can_manage_alerts(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "alerts.manage") and (is_system_admin(role_names) or is_firm_admin(role_names) or "Partner" in _roles(role_names) or "Branch Manager" in _roles(role_names))
def can_view_users(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "users.view")
def can_manage_users(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "users.manage") and (
is_system_admin(role_names) or is_firm_admin(role_names)
)
def can_view_settings(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "system.settings.view")
def can_edit_settings(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "system.settings.edit")
def can_manage_settings(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return is_system_admin(role_names)
def can_view_tenants(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return is_system_admin(role_names)
def can_manage_tenants(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return is_system_admin(role_names)
def can_view_branches(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return is_system_admin(role_names) or is_firm_admin(role_names)
def can_manage_branches(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return is_system_admin(role_names) or is_firm_admin(role_names)
def can_change_branch_tenant(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return is_system_admin(role_names)
def can_view_rbac(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return is_system_admin(role_names)
def can_manage_rbac(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return is_system_admin(role_names)
def can_view_audit(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "audit.view") and (
is_system_admin(role_names) or is_firm_admin(role_names)
)
def can_view_services(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "services.view")
def can_manage_services(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "services.create") or _has(permissions, "services.edit")
def can_manage_service_tasks(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "service_tasks.create") or _has(permissions, "service_tasks.edit")
def can_import_services(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "services.import")
def can_import_service_tasks(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "service_tasks.import")
def can_switch_service_tenant(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return is_system_admin(role_names) and _has(permissions, "services.cross_tenant")
def can_switch_service_branch(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "services.cross_branch") or can_switch_service_tenant(
user, permissions, role_names
)
def can_view_clients(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "clients.view")
def can_manage_clients(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "clients.create") or _has(permissions, "clients.edit")
def can_export_clients(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "clients.export")
def can_switch_client_tenant(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return is_system_admin(role_names) and _has(permissions, "clients.cross_tenant")
def can_switch_client_branch(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "clients.cross_branch") or can_switch_client_tenant(
user, permissions, role_names
)
def can_view_consultants(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "consultants.view")
def can_manage_consultants(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "consultants.manage") and (
is_system_admin(role_names) or is_firm_admin(role_names)
)
def can_link_consultant_clients(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "consultants.link_clients")
def can_manage_consultant_service_requests(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "consultants.service_requests.manage") and (
is_system_admin(role_names) or is_firm_admin(role_names)
)
def can_manage_consultant_conversions(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "consultants.conversions.manage") and (
is_system_admin(role_names) or is_firm_admin(role_names)
)
def can_view_consultant_portal(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "consultants.portal.view") or "Consultant" in _roles(role_names)
def can_manage_own_consultant_workspace(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return can_view_consultant_portal(user, permissions, role_names) and _has(permissions, "consultants.workspace.manage")
def can_view_employee_dashboard(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "employees.dashboard.view") and (
is_system_admin(role_names) or is_firm_admin(role_names) or "Partner" in _roles(role_names) or "Branch Manager" in _roles(role_names)
)
def can_view_employees(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "employees.view")
def can_manage_employees(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "employees.create") or _has(permissions, "employees.edit")
def can_change_employee_status(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "employees.status")
def can_switch_employee_tenant(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return is_system_admin(role_names) and _has(permissions, "employees.cross_tenant")
def can_switch_employee_branch(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "employees.cross_branch") or can_switch_employee_tenant(user, permissions, role_names)
def can_view_employee_portal(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "employees.ess.view") or bool({"System Admin", "Firm Admin", "Partner", "Branch Manager", "Staff"}.intersection(_roles(role_names)))
def can_edit_own_employee_profile(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return can_view_employee_portal(user, permissions, role_names) and _has(permissions, "employees.ess.profile.edit")
def can_view_own_employee_work(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "employees.work.view_self") or can_view_employee_portal(user, permissions, role_names)
def can_request_employee_registration(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "employees.registration.request") or can_view_employee_portal(user, permissions, role_names)
def can_approve_employee_registrations(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "employees.registration.approve") and (
is_system_admin(role_names) or is_firm_admin(role_names) or "Partner" in _roles(role_names) or "Branch Manager" in _roles(role_names)
)
def can_punch_employee_attendance(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "employees.attendance.punch") or can_view_employee_portal(user, permissions, role_names)
def can_view_own_employee_attendance(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "employees.attendance.view_self") or can_view_employee_portal(user, permissions, role_names)
def can_view_all_employee_attendance(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "employees.attendance.view_all") and (
is_system_admin(role_names) or is_firm_admin(role_names) or "Partner" in _roles(role_names) or "Branch Manager" in _roles(role_names)
)
def can_approve_employee_attendance(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "employees.attendance.approve") and (
is_system_admin(role_names) or is_firm_admin(role_names) or "Partner" in _roles(role_names) or "Branch Manager" in _roles(role_names)
)
def can_apply_employee_leave(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "employees.leave.apply") or can_view_employee_portal(user, permissions, role_names)
def can_view_own_employee_leave(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "employees.leave.view_self") or can_view_employee_portal(user, permissions, role_names)
def can_view_all_employee_leave(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "employees.leave.view_all") and (
is_system_admin(role_names) or is_firm_admin(role_names) or "Partner" in _roles(role_names) or "Branch Manager" in _roles(role_names)
)
def can_approve_employee_leave(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "employees.leave.approve") and (
is_system_admin(role_names) or is_firm_admin(role_names) or "Partner" in _roles(role_names) or "Branch Manager" in _roles(role_names)
)
def can_manage_employee_leave_types(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "employees.leave_type.manage") and (
is_system_admin(role_names) or is_firm_admin(role_names) or "Partner" in _roles(role_names) or "Branch Manager" in _roles(role_names)
)
def can_manage_employee_leave_balances(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "employees.leave_balance.manage") and (
is_system_admin(role_names) or is_firm_admin(role_names) or "Partner" in _roles(role_names) or "Branch Manager" in _roles(role_names)
)
def can_view_own_employee_documents(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "employees.documents.view_self") or can_view_employee_portal(user, permissions, role_names)
def can_upload_own_employee_documents(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "employees.documents.upload_self") or can_view_employee_portal(user, permissions, role_names)
def can_view_all_employee_documents(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "employees.documents.view_all") and (
is_system_admin(role_names) or is_firm_admin(role_names) or "Partner" in _roles(role_names) or "Branch Manager" in _roles(role_names)
)
def can_manage_employee_documents(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "employees.documents.manage") and (
is_system_admin(role_names) or is_firm_admin(role_names) or "Partner" in _roles(role_names) or "Branch Manager" in _roles(role_names)
)
def can_verify_employee_documents(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "employees.documents.verify") and (
is_system_admin(role_names) or is_firm_admin(role_names) or "Partner" in _roles(role_names) or "Branch Manager" in _roles(role_names)
)
def can_manage_employee_document_types(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "employees.document_type.manage") and (
is_system_admin(role_names) or is_firm_admin(role_names) or "Partner" in _roles(role_names) or "Branch Manager" in _roles(role_names)
)
def can_view_employee_onboarding(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "employees.onboarding.view") and (
is_system_admin(role_names) or is_firm_admin(role_names) or "Partner" in _roles(role_names) or "Branch Manager" in _roles(role_names)
)
def can_manage_employee_onboarding(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "employees.onboarding.manage") and (
is_system_admin(role_names) or is_firm_admin(role_names) or "Partner" in _roles(role_names) or "Branch Manager" in _roles(role_names)
)
def can_approve_employee_onboarding(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "employees.onboarding.approve") and (
is_system_admin(role_names) or is_firm_admin(role_names) or "Partner" in _roles(role_names) or "Branch Manager" in _roles(role_names)
)
def can_view_employee_offboarding(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "employees.offboarding.view") and (
is_system_admin(role_names) or is_firm_admin(role_names) or "Partner" in _roles(role_names) or "Branch Manager" in _roles(role_names)
)
def can_manage_employee_offboarding(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "employees.offboarding.manage") and (
is_system_admin(role_names) or is_firm_admin(role_names) or "Partner" in _roles(role_names) or "Branch Manager" in _roles(role_names)
)
def can_approve_employee_offboarding(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "employees.offboarding.approve") and (
is_system_admin(role_names) or is_firm_admin(role_names) or "Partner" in _roles(role_names) or "Branch Manager" in _roles(role_names)
)
def can_request_own_employee_offboarding(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "employees.offboarding.request_self") or can_view_employee_portal(user, permissions, role_names)
def can_import_employee_hr(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "employees.import") and (
is_system_admin(role_names) or is_firm_admin(role_names) or "Partner" in _roles(role_names) or "Branch Manager" in _roles(role_names)
)
def can_manage_employee_payroll_structures(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "employees.payroll.structure.manage") and (
is_system_admin(role_names) or is_firm_admin(role_names) or "Partner" in _roles(role_names) or "Branch Manager" in _roles(role_names)
)
def can_run_employee_payroll(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "employees.payroll.run") and (
is_system_admin(role_names) or is_firm_admin(role_names) or "Partner" in _roles(role_names) or "Branch Manager" in _roles(role_names)
)
def can_view_employee_payroll(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "employees.payroll.view") and (
is_system_admin(role_names) or is_firm_admin(role_names) or "Partner" in _roles(role_names) or "Branch Manager" in _roles(role_names)
)
def can_view_own_employee_payslips(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "employees.payroll.view_self") or can_view_employee_portal(user, permissions, role_names)
def can_approve_employee_payroll(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "employees.payroll.payout") and (
is_system_admin(role_names) or is_firm_admin(role_names) or "Partner" in _roles(role_names)
)
def can_view_employee_progress(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "employees.progress.view") and (
is_system_admin(role_names) or is_firm_admin(role_names) or "Partner" in _roles(role_names) or "Branch Manager" in _roles(role_names)
)
def can_manage_employee_work(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "employees.work.manage") and (
is_system_admin(role_names) or is_firm_admin(role_names) or "Partner" in _roles(role_names) or "Branch Manager" in _roles(role_names)
)
def can_view_billing(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "billing.view")
def can_create_billing(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "billing.create")
def can_import_billing_fee_structure(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "billing_fee_structure.import")
def can_view_billing_fee_structure(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "billing_fee_structure.view")
def can_generate_billing_invoices(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "billing_invoice.generate") or _has(permissions, "billing_invoice.bulk_generate")
def can_view_platform_billing(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return is_system_admin(role_names) and _has(permissions, "platform_billing.view")
def can_manage_platform_billing(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return is_system_admin(role_names) and (_has(permissions, "platform_billing.create") or _has(permissions, "platform_billing.edit"))
def can_generate_platform_billing(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return is_system_admin(role_names) and _has(permissions, "platform_billing.generate")
def can_manage_platform_plans(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return is_system_admin(role_names) and _has(permissions, "platform_plans.manage")
def can_manage_platform_subscriptions(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return is_system_admin(role_names) and _has(permissions, "platform_subscriptions.manage")
def can_view_marketplace_leads(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "marketplace_leads.view") or _has(permissions, "marketplace_leads.view_assigned")
def can_create_marketplace_leads(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return is_system_admin(role_names) and _has(permissions, "marketplace_leads.create")
def can_assign_marketplace_leads(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return is_system_admin(role_names) and _has(permissions, "marketplace_leads.assign")
def can_update_marketplace_leads(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "marketplace_leads.update")
def can_convert_marketplace_leads(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "marketplace_leads.convert")
def can_view_documents(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "documents.view")
def can_upload_documents(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "documents.upload")
def can_download_documents(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "documents.download")
def can_delete_documents(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "documents.delete") and (is_firm_admin(role_names) or "Partner" in _roles(role_names))
def can_view_notice_cases(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "notice_cases.view")
def can_manage_notice_cases(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "notice_cases.create") or _has(permissions, "notice_cases.edit")
def can_upload_notice_case_documents(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "notice_cases.documents.upload")
def can_download_notice_case_documents(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "notice_cases.documents.download")
def can_delete_notice_case_documents(user=None, permissions: list[str] | None = None, role_names: list[str] | None = None) -> bool:
return _has(permissions, "notice_cases.documents.delete")