mirror of
https://github.com/tiennm99/goclaw.git
synced 2026-10-11 03:13:24 +00:00
fix(skills): add agent manage grants
Add explicit per-agent manage grants for skills so granted agents can patch/delete skills when ownership identity drifts. Expose skill owner and manage-grant controls in the web skills UI, and add PostgreSQL/SQLite migrations plus coverage for preserve/revoke behavior.
This commit is contained in:
1 parent
ba3b535286
commit
0d6c5bbb7c
24 files changed
+595
-38
No files matched your search
@@ -271,6 +271,9 @@ func TestStoreSkill_GrantToAgent(t *testing.T) {
|
||||
if !g.Granted {
|
||||
t.Error("expected Granted=true for granted skill")
|
||||
}
|
||||
if g.CanManage {
|
||||
t.Error("expected CanManage=false by default")
|
||||
}
|
||||
found = true
|
||||
break
|
||||
}
|
||||
@@ -295,6 +298,37 @@ func TestStoreSkill_GrantToAgent(t *testing.T) {
|
||||
t.Error("granted skill not found in ListAccessible")
|
||||
}
|
||||
|
||||
if err := s.GrantToAgent(ctx, skillID, agentID, 1, "test-owner", true); err != nil {
|
||||
t.Fatalf("GrantToAgent can_manage: %v", err)
|
||||
}
|
||||
canManage, err := s.AgentCanManageSkill(ctx, skillID, agentID)
|
||||
if err != nil {
|
||||
t.Fatalf("AgentCanManageSkill: %v", err)
|
||||
}
|
||||
if !canManage {
|
||||
t.Error("expected AgentCanManageSkill=true after manage grant")
|
||||
}
|
||||
if err := s.GrantToAgent(ctx, skillID, agentID, 1, "test-owner"); err != nil {
|
||||
t.Fatalf("GrantToAgent preserve can_manage: %v", err)
|
||||
}
|
||||
canManage, err = s.AgentCanManageSkill(ctx, skillID, agentID)
|
||||
if err != nil {
|
||||
t.Fatalf("AgentCanManageSkill after preserve grant: %v", err)
|
||||
}
|
||||
if !canManage {
|
||||
t.Error("expected omitted can_manage grant update to preserve existing manage permission")
|
||||
}
|
||||
if err := s.GrantToAgent(ctx, skillID, agentID, 1, "test-owner", false); err != nil {
|
||||
t.Fatalf("GrantToAgent can_manage false: %v", err)
|
||||
}
|
||||
canManage, err = s.AgentCanManageSkill(ctx, skillID, agentID)
|
||||
if err != nil {
|
||||
t.Fatalf("AgentCanManageSkill after false grant: %v", err)
|
||||
}
|
||||
if canManage {
|
||||
t.Error("expected explicit can_manage=false to revoke manage permission")
|
||||
}
|
||||
|
||||
// Revoke
|
||||
if err := s.RevokeFromAgent(ctx, skillID, agentID); err != nil {
|
||||
t.Fatalf("RevokeFromAgent: %v", err)
|
||||
|
||||
Reference in new issue
Block a user