refactor: spell the five permission codes out in the catalog

The catalog reads like the Winter registerPermissions() list, and a
test pins the codes and their default roles.
This commit is contained in:
Jakub Zych
2026-10-05 13:03:36 +02:00
parent f3f33b809a
commit ebaf3a0817
2 changed files with 29 additions and 10 deletions

View File

@@ -1,23 +1,20 @@
package user
import (
"git.golem15.com/golem15/sm-user-plugin/classes"
"git.golem15.com/golem15/sm-user-plugin/controllers"
"git.golem15.com/golem15/summercms/modules/pact"
)
import "git.golem15.com/golem15/summercms/modules/pact"
const userPermissionTab = "golem15.user::lang.plugin.tab"
// Permissions is the plugin's Winter registerPermissions() catalog plus one
// code of its own. The four PHP codes default to the developer role;
// impersonate_user is registered so imported backend roles that name it stay
// valid, although no screen uses it. manage_privileged_groups has no default
// role: only a superuser, or a role that was granted it explicitly, may
// change the email or password of a privileged-group member or delete one.
// valid, although no screen uses it. The fifth code
// (classes.PermissionManagePrivilegedGroups) has no default role: only a
// superuser, or a role that was granted it explicitly, may change the email
// or password of a privileged-group member or delete one.
func (*Plugin) Permissions() []pact.Permission {
return []pact.Permission{
{
Code: controllers.PermissionAccessUsers,
Code: "golem15.users.access_users",
Tab: userPermissionTab,
Label: "golem15.user::lang.plugin.access_users",
Roles: []string{"developer"},
@@ -41,7 +38,7 @@ func (*Plugin) Permissions() []pact.Permission {
Roles: []string{"developer"},
},
{
Code: classes.PermissionManagePrivilegedGroups,
Code: "golem15.users.manage_privileged_groups",
Tab: userPermissionTab,
Label: "golem15.user::lang.plugin.manage_privileged_groups",
},

View File

@@ -7,6 +7,7 @@ import (
"strings"
"testing"
"git.golem15.com/golem15/sm-user-plugin/classes"
"git.golem15.com/golem15/sm-user-plugin/models"
"git.golem15.com/golem15/summercms/modules/compass"
)
@@ -20,6 +21,27 @@ const (
// permission gating, the list schema, row states, search, the three filters
// and an update.
func TestAdminUsersTracer(t *testing.T) {
// The permission catalog: the four Winter codes default to the developer
// role, the privileged-groups code to no role at all.
var codes []string
for _, permission := range (&Plugin{}).Permissions() {
role := "-"
if len(permission.Roles) == 1 {
role = permission.Roles[0]
}
codes = append(codes, permission.Code+"@"+role)
if permission.Tab != "golem15.user::lang.plugin.tab" || !strings.HasPrefix(permission.Label, "golem15.user::lang.plugin.") {
t.Fatalf("permission %+v", permission)
}
}
if want := []string{
"golem15.users.access_users@developer", "golem15.users.access_groups@developer",
"golem15.users.access_settings@developer", "golem15.users.impersonate_user@developer",
classes.PermissionManagePrivilegedGroups + "@-",
}; !reflect.DeepEqual(codes, want) || classes.PermissionManagePrivilegedGroups != permManagePrivileged {
t.Fatalf("permissions = %v", codes)
}
env := newAdminEnv(t)
token := env.admin(t, permAccessUsers)
stranger := env.admin(t)