feat: more role backend and admin/writer roles additions and adjustments

This commit is contained in:
Florian Sylvain committed 2026-10-26 18:15:26 +01:00
1 parent 8c6c6456da
commit de142f6c5f
131 files changed
+2663 -435

No files matched your search

+6 -6
View File
@@ -48,7 +48,7 @@ func newInviteManagementFixture(t *testing.T, maxAttempts int) *inviteManagement
token: authtoken.New([]byte("test-secret")),
}
f.invites.users = f.users
f.users.users[9] = user.User{ID: 9, Username: "jonas", Email: "jonas@renew.example", IsVerified: true, Role: user.RoleAdmin}
f.users.users[9] = user.User{ID: 9, Username: "jonas", Email: "jonas@renew.example", IsVerified: true, Role: user.RoleAdmin, RoleID: writerRoleID}
f.users.users[11] = user.User{ID: 11, Username: "unverified", Email: "unverified@renew.example", IsVerified: false, Role: user.RoleAdmin}
f.users.users[12] = user.User{ID: 12, Username: "stale", Email: "stale@renew.example", IsVerified: true, Role: user.RoleOwner, TokenVersion: 2}
f.users.nextID = 12
@@ -77,7 +77,7 @@ func newInviteManagementFixture(t *testing.T, maxAttempts int) *inviteManagement
r.Use(middleware.RequireVerifiedUser(getUser))
r.Get("/", handler.ListUsers)
r.Group(func(r chi.Router) {
r.Use(middleware.RequireOwner(getUser))
r.Use(middleware.RequirePermission(getUser, useCases.NewCheckPermissionUseCase(newSeededMockRoleRepo()), "users.invite"))
r.Use(middleware.TrustedProxyRealIP(nil))
r.Use(middleware.NewRateLimiter(maxAttempts, time.Hour))
r.Post("/invite", handler.CreateInvite)
@@ -383,7 +383,7 @@ func TestInviteManagementHttp(t *testing.T) {
{"no cookie", func(f *inviteManagementFixture) *http.Cookie { return nil }, http.StatusUnauthorized},
{"stale token_version", func(f *inviteManagementFixture) *http.Cookie { return displayNameCookie(t, f.token, 12, 1) }, http.StatusUnauthorized},
{"unverified user", func(f *inviteManagementFixture) *http.Cookie { return displayNameCookie(t, f.token, 11, 0) }, http.StatusForbidden},
{"admin", func(f *inviteManagementFixture) *http.Cookie { return displayNameCookie(t, f.token, 9, 0) }, http.StatusForbidden},
{"writer", func(f *inviteManagementFixture) *http.Cookie { return displayNameCookie(t, f.token, 9, 0) }, http.StatusForbidden},
}
for _, tc := range cases {
for _, call := range []struct{ method, path string }{
@@ -402,12 +402,12 @@ func TestInviteManagementHttp(t *testing.T) {
}
})
t.Run("An admin is refused with the owner message, even on an unknown id", func(t *testing.T) {
t.Run("A writer is refused with the missing permission message, even on an unknown id", func(t *testing.T) {
f := newInviteManagementFixture(t, 100)
rec := f.asUser(t, 9, 0, http.MethodDelete, "/v1/user/invite/999")
if rec.Code != http.StatusForbidden || rec.Body.String() != apperr.OwnerRequiredErrorMessage+"\n" {
if rec.Code != http.StatusForbidden || rec.Body.String() != apperr.MissingPermissionErrorMessage+"\n" {
t.Errorf("unexpected %d %q", rec.Code, rec.Body.String())
}
})
@@ -450,7 +450,7 @@ func TestInviteManagementHttp(t *testing.T) {
}
})
t.Run("An admin does not use up the quota", func(t *testing.T) {
t.Run("A writer does not use up the quota", func(t *testing.T) {
f := newInviteManagementFixture(t, 2)
for i := 0; i < 3; i++ {
if rec := f.asUser(t, 9, 0, http.MethodDelete, "/v1/user/invite/1"); rec.Code != http.StatusForbidden {