mirror of
https://github.com/Studio-Saelix/sencho.git
synced 2026-08-12 19:57:37 +00:00
e5b1c7b22b
Removes backend/src/entitlements/ (registry, loadProvider, CommunityEntitlementProvider, types, headers, normalize) and the two abstraction-only tests. Relocates headers/normalize/types to services/license-*.ts. Swaps 22 consumer call sites from getEntitlementProvider() to LicenseService.getInstance(). Drops the Dockerfile install step plus PRO_PACKAGE_VERSION build-arg and github_token BuildKit secret in docker-publish.yml. Removes the now stale no-restricted-imports rule in backend/eslint.config.mjs. Net: 37 files changed, ~700 lines removed, no behavior change. Local dev no longer requires GitHub Packages auth to start the backend. Rationale and revisit conditions in docs/internal/adrs/2026-05-02-collapse-entitlement-provider.md.
40 lines
1.4 KiB
TypeScript
40 lines
1.4 KiB
TypeScript
import { Router, type Request, type Response } from 'express';
|
|
import { DatabaseService } from '../services/DatabaseService';
|
|
import { LicenseService } from '../services/LicenseService';
|
|
import { authMiddleware } from '../middleware/auth';
|
|
import { ROLE_PERMISSIONS, type PermissionAction } from '../middleware/permissions';
|
|
|
|
export const permissionsRouter = Router();
|
|
|
|
permissionsRouter.get('/me', authMiddleware, (req: Request, res: Response): void => {
|
|
try {
|
|
if (!req.user) {
|
|
res.status(401).json({ error: 'Not authenticated' });
|
|
return;
|
|
}
|
|
|
|
const db = DatabaseService.getInstance();
|
|
const globalRole = req.user.role;
|
|
const globalPermissions = ROLE_PERMISSIONS[globalRole] || [];
|
|
const assignments = db.getAllRoleAssignments(req.user.userId);
|
|
|
|
const scopedPermissions: Record<string, PermissionAction[]> = {};
|
|
for (const a of assignments) {
|
|
const key = `${a.resource_type}:${a.resource_id}`;
|
|
const perms = ROLE_PERMISSIONS[a.role] || [];
|
|
const existing = scopedPermissions[key] || [];
|
|
scopedPermissions[key] = [...new Set([...existing, ...perms])];
|
|
}
|
|
|
|
res.json({
|
|
globalRole,
|
|
globalPermissions,
|
|
scopedPermissions,
|
|
isAdmiral: LicenseService.getInstance().getVariant() === 'admiral',
|
|
});
|
|
} catch (error) {
|
|
console.error('[Permissions] Error:', error);
|
|
res.status(500).json({ error: 'Failed to fetch permissions' });
|
|
}
|
|
});
|