Skip to content

Admin Backend

The admin backend runs through a native Perl controller and domain-specific models instead of the ClaJS handler chain. Frontend requests still use /plugin/admin?path=..., but lib/Baseliner/Controller/Plugin.pm now routes admin traffic into lib/Baseliner/Controller/Admin.pm, which delegates endpoint behavior to domain-specific models.

This keeps the existing React UI contract intact while removing the runtime dependency on the Duktape-backed admin controller. The legacy ClaJS files remain on disk as rollback material, but they are no longer part of the active request path.

Architecture

A single controller (Admin.pm) with a unified dispatch table maps path values to model methods. The frontend shim (plugins/admin/src/lib/adminRequest.js) strips the admin/ prefix from request paths and routes calls to /admin/api.

Models

Model Domain Endpoints
AdminProject Project CRUD, permissions, environments 12
AdminUser User/role/permission management 7
AdminSystemStats System statistics aggregation 1
AdminConfig Config, tags, labels, repositories 11

Endpoints Covered

Project domain (AdminProject):

  • project/list — paginated project list with admin flags
  • project/get — load a single project
  • project/insert — create a new project
  • project/update — update project properties
  • project/delete — delete a project
  • project/activate — activate a project
  • project/disable — disable a project
  • project/listEnvironments — list active environments
  • project/createRepository — create a git repository for a project
  • project/hasPermission — check if user can admin a specific project
  • project/canCreate — check if user can create projects
  • project/checkTopics — count topics linked to a project

User domain (AdminUser):

  • user/list — list users and user groups in a project with roles
  • user/listUsersProfiles — list users and user groups excluding defaults
  • user/listRoles — list roles granted to the current user
  • user/listUsers — list regular users
  • user/permissions — assign/unassign roles to users for a project
  • user/deletePermissions — remove user permissions from a project
  • user/editPermissions — get user's role IDs for a specific project

Config domain (AdminConfig):

  • config/list — list config settings with permission check
  • config/save — save config settings
  • tags/list — list tags with permission check
  • label/list — list labels with project/global scope
  • label/insert — create a label
  • label/update — update a label
  • label/delete — delete a label
  • repository/list — list repositories for a project
  • repository/delete — delete a repository
  • repository/getTypes — get available repository types
  • repository/createRepositoryExternal — create a non-git repository

System statistics (AdminSystemStats):

  • system_stats/list — aggregated system statistics with filtering and pagination

Permission checks (inline in controller):

  • event/canAdminEvents
  • variable/canAdminVariables
  • resource/canAdminResources
  • role/canAdminRoles
  • usergroup/canAdminUserGroups
  • status/canAdminStatus
  • resource/canViewResources
  • repl/canAdminREPL
  • user/canAdminUsers

Validation

./bin/cla exec perl -c lib/Baseliner/Controller/Admin.pm
./bin/cla exec perl -c lib/Baseliner/Model/AdminProject.pm
./bin/cla exec perl -c lib/Baseliner/Model/AdminUser.pm
./bin/cla exec perl -c lib/Baseliner/Model/AdminConfig.pm
./bin/cla exec perl -c lib/Baseliner/Model/AdminSystemStats.pm
./bin/cla prove t/baseliner/controller/admin.t
./bin/cla prove t/baseliner/model/admin_project.t
./bin/cla prove t/baseliner/model/admin_user.t
./bin/cla prove t/baseliner/model/admin_config.t
./bin/cla prove t/baseliner/model/admin_system_stats.t