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 flagsproject/get— load a single projectproject/insert— create a new projectproject/update— update project propertiesproject/delete— delete a projectproject/activate— activate a projectproject/disable— disable a projectproject/listEnvironments— list active environmentsproject/createRepository— create a git repository for a projectproject/hasPermission— check if user can admin a specific projectproject/canCreate— check if user can create projectsproject/checkTopics— count topics linked to a project
User domain (AdminUser):
user/list— list users and user groups in a project with rolesuser/listUsersProfiles— list users and user groups excluding defaultsuser/listRoles— list roles granted to the current useruser/listUsers— list regular usersuser/permissions— assign/unassign roles to users for a projectuser/deletePermissions— remove user permissions from a projectuser/editPermissions— get user's role IDs for a specific project
Config domain (AdminConfig):
config/list— list config settings with permission checkconfig/save— save config settingstags/list— list tags with permission checklabel/list— list labels with project/global scopelabel/insert— create a labellabel/update— update a labellabel/delete— delete a labelrepository/list— list repositories for a projectrepository/delete— delete a repositoryrepository/getTypes— get available repository typesrepository/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/canAdminEventsvariable/canAdminVariablesresource/canAdminResourcesrole/canAdminRolesusergroup/canAdminUserGroupsstatus/canAdminStatusresource/canViewResourcesrepl/canAdminREPLuser/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