mirror of
https://github.com/QuantumNous/new-api.git
synced 2026-09-13 15:54:34 +00:00
feat(task): replace built-in task adaptors with a sandboxed JS plugin system (#7076)
This commit is contained in:
@@ -105,6 +105,9 @@ func TestSetUserPermissionsStoresOnlyOverrides(t *testing.T) {
|
||||
ActionSensitiveWrite: true,
|
||||
ActionSecretView: false,
|
||||
},
|
||||
ResourceTaskPlugin: {
|
||||
ActionBind: false,
|
||||
},
|
||||
}, ExplicitUserPermissions(42))
|
||||
assert.Equal(t, PermissionsMap{
|
||||
ResourceChannel: {
|
||||
@@ -133,6 +136,9 @@ func TestSetUserPermissionsStoresOnlyOverrides(t *testing.T) {
|
||||
ActionSensitiveWrite: false,
|
||||
ActionSecretView: false,
|
||||
},
|
||||
ResourceTaskPlugin: {
|
||||
ActionBind: false,
|
||||
},
|
||||
}, ExplicitUserPermissions(42))
|
||||
assert.Empty(t, ExplicitUserOverrides(42))
|
||||
}
|
||||
@@ -226,4 +232,40 @@ func TestCapabilitiesUseCatalogShape(t *testing.T) {
|
||||
assert.True(t, capabilities[ResourceChannel][ActionWrite])
|
||||
assert.False(t, capabilities[ResourceChannel][ActionSensitiveWrite])
|
||||
assert.False(t, capabilities[ResourceChannel][ActionSecretView])
|
||||
assert.False(t, capabilities[ResourceTaskPlugin][ActionBind])
|
||||
}
|
||||
|
||||
func TestTaskPluginBindIsRootOnlyUntilGranted(t *testing.T) {
|
||||
db := newAuthzTestDB(t)
|
||||
require.NoError(t, Init(db))
|
||||
|
||||
var bindAction *ActionDefinition
|
||||
for _, resource := range Catalog() {
|
||||
if resource.Resource != ResourceTaskPlugin {
|
||||
continue
|
||||
}
|
||||
assert.Equal(t, "Task Plugin", resource.LabelKey)
|
||||
for i := range resource.Actions {
|
||||
if resource.Actions[i].Action == ActionBind {
|
||||
bindAction = &resource.Actions[i]
|
||||
}
|
||||
}
|
||||
}
|
||||
require.NotNil(t, bindAction)
|
||||
assert.Equal(t, "Bind task plugins", bindAction.LabelKey)
|
||||
assert.Equal(t, "List registered task plugins and bind them when creating or editing task plugin channels.", bindAction.DescriptionKey)
|
||||
assert.Empty(t, bindAction.DefaultRoles)
|
||||
|
||||
assert.False(t, Can(2, common.RoleAdminUser, TaskPluginBind))
|
||||
assert.True(t, Can(1, common.RoleRootUser, TaskPluginBind))
|
||||
|
||||
enforcer := currentEnforcer()
|
||||
require.NotNil(t, enforcer)
|
||||
_, err := enforcer.AddPolicy(RoleSubject(BuiltInRoleAdmin), ResourceTaskPlugin, ActionBind, EffectAllow)
|
||||
require.NoError(t, err)
|
||||
assert.True(t, Can(2, common.RoleAdminUser, TaskPluginBind))
|
||||
|
||||
_, err = enforcer.RemovePolicy(RoleSubject(BuiltInRoleAdmin), ResourceTaskPlugin, ActionBind, EffectAllow)
|
||||
require.NoError(t, err)
|
||||
assert.False(t, Can(2, common.RoleAdminUser, TaskPluginBind))
|
||||
}
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
package authz
|
||||
|
||||
const (
|
||||
ResourceTaskPlugin = "task_plugin"
|
||||
|
||||
ActionBind = "bind"
|
||||
)
|
||||
|
||||
var TaskPluginBind = Permission{Resource: ResourceTaskPlugin, Action: ActionBind}
|
||||
|
||||
func init() {
|
||||
RegisterResource(ResourceDefinition{
|
||||
Resource: ResourceTaskPlugin,
|
||||
LabelKey: "Task Plugin",
|
||||
Actions: []ActionDefinition{
|
||||
{
|
||||
Action: ActionBind,
|
||||
LabelKey: "Bind task plugins",
|
||||
DescriptionKey: "List registered task plugins and bind them when creating or editing task plugin channels.",
|
||||
},
|
||||
},
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user