fix(ui): согласовать права диагностики с API

This commit is contained in:
Denozordec committed 2026-10-01 04:14:52 +07:00
1 parent cba3db1508
commit b856215c03
6 files changed
+50 -11

No files matched your search

+5 -4
View File
@@ -7,10 +7,11 @@ const {default:authPlugin,requireAuth}=await import("./auth.js"),{createExecRout
const app=Fastify();app.setValidatorCompiler(validatorCompiler);app.setSerializerCompiler(serializerCompiler);await app.register(authPlugin);app.addHook("preHandler",requireAuth)
let lookups=0
await app.register(createExecRoutes({getServer:async()=>{lookups++;return undefined},createClient:()=>{throw new Error("unused")}}),{prefix:"/api"})
const send=(token?:string)=>app.inject({method:"POST",url:"/api/servers/1/exec",payload:{command:"interface print"},headers:token?{authorization:"Bearer "+token}:{}})
app.post("/api/servers/:id/probes/run",async(_req,reply)=>{lookups++;return reply.status(404).send({error:"DI: no device"})})
const send=(token?:string,url="/api/servers/1/exec")=>app.inject({method:"POST",url,payload:{command:"interface print"},headers:token?{authorization:"Bearer "+token}:{}})
assert.equal((await send()).statusCode,401);assert.equal(lookups,0)
for(const permission of ["mm:servers:read","mm:network:write","mm:servers:write","mm:servers:admin"]){
for(const url of ["/api/servers/1/exec","/api/servers/1/probes/run"])for(const permission of ["mm:servers:read","mm:network:write","mm:servers:write","mm:servers:admin"]){
const token=await new SignJWT({sub:"test",apps:["mm"],permissions:[permission]}).setProtectedHeader({alg:"HS256"}).setIssuer("https://auth.test.local").setExpirationTime("1h").sign(new TextEncoder().encode("terminal-test-secret"))
const before=lookups,response=await send(token);const allowed=permission==="mm:servers:write"||permission==="mm:servers:admin";assert.equal(response.statusCode,allowed?404:403);assert.equal(lookups,before+(allowed?1:0))
const before=lookups,response=await send(token,url);const allowed=permission==="mm:servers:write"||permission==="mm:servers:admin";assert.equal(response.statusCode,allowed?404:403);assert.equal(lookups,before+(allowed?1:0))
}
await app.close();console.log("Exec RBAC: signed JWT requires existing servers:write/admin before device lookup; no DB/RouterOS")
await app.close();console.log("Exec/Probes RBAC: signed JWT requires existing servers:write/admin before device lookup; no DB/RouterOS")