pgadmin4/web/pgadmin/tools/user_management/PgAdminPermissions.py

143 lines
4.6 KiB
Python

##########################################################################
#
# pgAdmin 4 - PostgreSQL Tools
#
# Copyright (C) 2013 - 2025, The pgAdmin Development Team
# This software is released under the PostgreSQL Licence
#
##########################################################################
from flask_babel import gettext
class AllPermissionTypes:
object_register_server = 'object_register_server'
tools_erd_tool = 'tools_erd_tool'
tools_query_tool = 'tools_query_tool'
tools_debugger = 'tools_debugger'
tools_psql_tool = 'tools_psql_tool'
tools_backup = 'tools_backup'
tools_restore = 'tools_restore'
tools_import_export_data = 'tools_import_export_data'
tools_import_export_servers = 'tools_import_export_servers'
tools_search_objects = 'tools_search_objects'
tools_maintenance = 'tools_maintenance'
tools_schema_diff = 'tools_schema_diff'
tools_grant_wizard = 'tools_grant_wizard'
storage_add_folder = 'storage_add_folder'
storage_remove_folder = 'storage_remove_folder'
change_password = 'change_password'
@staticmethod
def list():
return filter(lambda x: not x.startswith('_'),
AllPermissionTypes.__dict__.keys())
class AllPermissionCategories:
object_explorer = gettext('Object Explorer')
tools = gettext('Tools')
storage_manager = gettext('Storage Manager')
miscellaneous = gettext('Miscellaneous')
class PgAdminPermissions:
_all_permissions = []
def __init__(self):
self.add_permission(
AllPermissionCategories.object_explorer,
AllPermissionTypes.object_register_server,
gettext("Manage Server")
)
self.add_permission(
AllPermissionCategories.tools,
AllPermissionTypes.tools_query_tool,
gettext("Query Tool")
)
self.add_permission(
AllPermissionCategories.tools,
AllPermissionTypes.tools_debugger,
gettext("Debugger")
)
self.add_permission(
AllPermissionCategories.tools,
AllPermissionTypes.tools_psql_tool,
gettext("PSQL Tool")
)
self.add_permission(
AllPermissionCategories.tools,
AllPermissionTypes.tools_backup,
gettext("Backup Tool (including server and globals)")
)
self.add_permission(
AllPermissionCategories.tools,
AllPermissionTypes.tools_restore,
gettext("Restore Tool")
)
self.add_permission(
AllPermissionCategories.tools,
AllPermissionTypes.tools_import_export_data,
gettext("Import/Export Data")
)
self.add_permission(
AllPermissionCategories.tools,
AllPermissionTypes.tools_import_export_servers,
gettext("Import/Export Servers")
)
self.add_permission(
AllPermissionCategories.tools,
AllPermissionTypes.tools_search_objects,
gettext("Search Objects")
)
self.add_permission(
AllPermissionCategories.tools,
AllPermissionTypes.tools_maintenance,
gettext("Maintenance")
)
self.add_permission(
AllPermissionCategories.tools,
AllPermissionTypes.tools_schema_diff,
gettext("Schema Diff")
)
self.add_permission(
AllPermissionCategories.tools,
AllPermissionTypes.tools_grant_wizard,
gettext("Grant Wizard")
)
self.add_permission(
AllPermissionCategories.tools,
AllPermissionTypes.tools_erd_tool,
gettext("ERD Tool")
)
self.add_permission(
AllPermissionCategories.storage_manager,
AllPermissionTypes.storage_add_folder,
gettext("Add Folder")
)
self.add_permission(
AllPermissionCategories.storage_manager,
AllPermissionTypes.storage_remove_folder,
gettext("Delete File/Folder")
)
self.add_permission(
AllPermissionCategories.miscellaneous,
AllPermissionTypes.change_password,
gettext("Change Password")
)
def add_permission(self, category: str, permission: str, label: str):
self._all_permissions.append({
"category": category,
"name": permission,
"label": label,
})
@property
def all_permissions(self):
return sorted(
self._all_permissions,
key=lambda x: (
x['category'],
x['label']))