feat(cabana): settings entries that link to an admin controller
pact.SettingsItem gains an additive Controller field, the equivalent of a WinterCMS registerSettings 'url' => Backend::url(...) entry. A link entry declares no Model, Form or NewModel and needs no AdminFS; start-up fails when it combines Controller with a singleton form or a model, or names an unregistered controller. Settings codes stay one namespace. GET /settings lists a link entry with its controller only when the principal passes the item's permissions and may open the controller. Registry.Setting never returns a link entry, so the singleton settings endpoints answer 404 for its code. SettingsEntry carries controller, empty for singletons; the OpenAPI document, generated SPA types and settings fixture follow, and the pact and cabana READMEs and the settings docs describe the link.
This commit is contained in:
@@ -131,13 +131,18 @@ func (r *Registry) Get(id string) (*CompiledController, bool) {
|
||||
return cc, ok && cc != nil
|
||||
}
|
||||
|
||||
// Setting returns one compiled singleton setting by stable code.
|
||||
// Setting returns one compiled singleton setting by stable code. Link entries
|
||||
// (pact.SettingsItem with Controller set) are not singletons and are not
|
||||
// returned, so the singleton settings endpoints answer 404 for their codes.
|
||||
func (r *Registry) Setting(code string) (*CompiledSetting, bool) {
|
||||
if r == nil {
|
||||
return nil, false
|
||||
}
|
||||
setting, ok := r.settings[code]
|
||||
return setting, ok && setting != nil
|
||||
if !ok || setting == nil || setting.Item.Controller != "" {
|
||||
return nil, false
|
||||
}
|
||||
return setting, true
|
||||
}
|
||||
|
||||
// Allows reports whether principal satisfies any of the required permission
|
||||
|
||||
Reference in New Issue
Block a user