agent-exec transport 9a972977c78e74d4c92c9978a0a916ac/15be41c34e62
This commit is contained in:
@@ -274,6 +274,43 @@ func TestProjectAccessIgnoresSystemGrantWithoutRole(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestProjectCreateFailsClosedWithoutRoleProvider(t *testing.T) {
|
||||
srv, st := newAuthTestServer(t)
|
||||
h := srv.Handler()
|
||||
superAdmin := bootSuperAdmin(t, h, st)
|
||||
if err := st.CreateAccount("engineer", "Engineer", "", false); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
key, err := st.CreateAPIKey("engineer", "engineer-test")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
if rec := bearerRequest(h, "POST", "/api/projects", `{"name":"无职位项目"}`, key); rec.Code != http.StatusForbidden ||
|
||||
!strings.Contains(rec.Body.String(), "not-granted") {
|
||||
t.Fatalf("project created without role: %d %s", rec.Code, rec.Body.String())
|
||||
}
|
||||
if allowed, _, reason := systemDecisionFixture(t, bearerRequest(h, "GET", "/api/authz/explain?action=project.create", "", key)); allowed || reason != "not-granted" {
|
||||
t.Fatalf("missing role project.create allowed=%v reason=%s", allowed, reason)
|
||||
}
|
||||
|
||||
createAssignedRoleFixture(t, h, st, superAdmin, "engineer", "工程师", true)
|
||||
if rec := bearerRequest(h, "POST", "/api/projects", `{"name":"职位授权项目"}`, key); rec.Code != http.StatusOK {
|
||||
t.Fatalf("role project create: %d %s", rec.Code, rec.Body.String())
|
||||
}
|
||||
|
||||
if _, err := st.DB().Exec(`DROP TABLE role_permissions`); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if rec := bearerRequest(h, "POST", "/api/projects", `{"name":"职位不可用项目"}`, key); rec.Code != http.StatusForbidden ||
|
||||
!strings.Contains(rec.Body.String(), "authority-unavailable") {
|
||||
t.Fatalf("project created with unavailable role provider: %d %s", rec.Code, rec.Body.String())
|
||||
}
|
||||
if allowed, source, reason := systemDecisionFixture(t, bearerRequest(h, "GET", "/api/authz/explain?action=project.create", "", key)); allowed || source != "" || reason != "authority-unavailable" {
|
||||
t.Fatalf("unavailable role project.create allowed=%v source=%s reason=%s", allowed, source, reason)
|
||||
}
|
||||
}
|
||||
|
||||
func TestLegacyRoleRowsDoNotAuthorizeSystemActionsOrAccess(t *testing.T) {
|
||||
srv, st := newAuthTestServer(t)
|
||||
h := srv.Handler()
|
||||
|
||||
Reference in New Issue
Block a user