From 93b047712d9d0bb5d114d5b7dde6c787fa28dc21 Mon Sep 17 00:00:00 2001 From: Max Date: Tue, 13 Dec 2022 11:02:55 +0800 Subject: [PATCH] [add] widget table default guard option --- widgets/table/action.go | 46 +++++++++++++++++++++++-------------- widgets/table/api_test.go | 34 +++++++++++++++++++++++++++ widgets/table/table_test.go | 2 +- widgets/table/types.go | 1 + 4 files changed, 65 insertions(+), 18 deletions(-) diff --git a/widgets/table/action.go b/widgets/table/action.go index 7b47065e..ab5419dc 100644 --- a/widgets/table/action.go +++ b/widgets/table/action.go @@ -94,84 +94,96 @@ var processActionDefaults = map[string]*action.Process{ }, } +func (act *ActionDSL) getDefaults() map[string]*action.Process { + defaults := map[string]*action.Process{} + for key, action := range processActionDefaults { + new := *action + if act.Guard != "" { + new.Guard = act.Guard + } + defaults[key] = &new + } + return defaults +} + // SetDefaultProcess set the default value of action func (act *ActionDSL) SetDefaultProcess() { - + defaults := act.getDefaults() act.Setting = action.ProcessOf(act.Setting). - Merge(processActionDefaults["Setting"]). + Merge(defaults["Setting"]). SetHandler(processHandler) act.Component = action.ProcessOf(act.Component). - Merge(processActionDefaults["Component"]). + Merge(defaults["Component"]). SetHandler(processHandler) act.Upload = action.ProcessOf(act.Upload). - Merge(processActionDefaults["Upload"]). + Merge(defaults["Upload"]). SetHandler(processHandler) act.Download = action.ProcessOf(act.Download). - Merge(processActionDefaults["Download"]). + Merge(defaults["Download"]). SetHandler(processHandler) act.Search = action.ProcessOf(act.Search). WithBefore(act.BeforeSearch).WithAfter(act.AfterSearch). - Merge(processActionDefaults["Search"]). + Merge(defaults["Search"]). SetHandler(processHandler) act.Get = action.ProcessOf(act.Get). WithBefore(act.BeforeGet).WithAfter(act.AfterGet). - Merge(processActionDefaults["Get"]). + Merge(defaults["Get"]). SetHandler(processHandler) act.Find = action.ProcessOf(act.Find). WithBefore(act.BeforeFind). WithAfter(act.AfterFind). - Merge(processActionDefaults["Find"]). + Merge(defaults["Find"]). SetHandler(processHandler) act.Save = action.ProcessOf(act.Save). WithBefore(act.BeforeSave).WithAfter(act.AfterSave). - Merge(processActionDefaults["Save"]). + Merge(defaults["Save"]). SetHandler(processHandler) act.Create = action.ProcessOf(act.Create). WithBefore(act.BeforeCreate).WithAfter(act.AfterCreate). - Merge(processActionDefaults["Create"]). + Merge(defaults["Create"]). SetHandler(processHandler) act.Insert = action.ProcessOf(act.Insert). WithBefore(act.BeforeInsert).WithAfter(act.AfterInsert). - Merge(processActionDefaults["Insert"]). + Merge(defaults["Insert"]). SetHandler(processHandler) act.Update = action.ProcessOf(act.Update). WithBefore(act.BeforeUpdate).WithAfter(act.AfterUpdate). - Merge(processActionDefaults["Update"]). + Merge(defaults["Update"]). SetHandler(processHandler) act.UpdateWhere = action.ProcessOf(act.UpdateWhere). WithBefore(act.BeforeUpdateWhere).WithAfter(act.AfterUpdateWhere). - Merge(processActionDefaults["UpdateWhere"]). + Merge(defaults["UpdateWhere"]). SetHandler(processHandler) act.UpdateIn = action.ProcessOf(act.UpdateIn). WithBefore(act.BeforeUpdateIn).WithAfter(act.AfterUpdateIn). - Merge(processActionDefaults["UpdateIn"]). + Merge(defaults["UpdateIn"]). SetHandler(processHandler) act.Delete = action.ProcessOf(act.Delete). WithBefore(act.BeforeDelete).WithAfter(act.AfterDelete). - Merge(processActionDefaults["Delete"]). + Merge(defaults["Delete"]). SetHandler(processHandler) act.DeleteWhere = action.ProcessOf(act.DeleteWhere). WithBefore(act.BeforeDeleteWhere).WithAfter(act.AfterDeleteWhere). - Merge(processActionDefaults["DeleteWhere"]). + Merge(defaults["DeleteWhere"]). SetHandler(processHandler) act.DeleteIn = action.ProcessOf(act.DeleteIn). WithBefore(act.BeforeDeleteIn).WithAfter(act.AfterDeleteIn). - Merge(processActionDefaults["DeleteIn"]). + Merge(defaults["DeleteIn"]). SetHandler(processHandler) } diff --git a/widgets/table/api_test.go b/widgets/table/api_test.go index 364e66fe..19cbc86d 100644 --- a/widgets/table/api_test.go +++ b/widgets/table/api_test.go @@ -147,6 +147,40 @@ func TestAPICustomGuard(t *testing.T) { assert.Equal(t, 200, res.Status()) } +func TestAPIGlobalCustomGuard(t *testing.T) { + + port := start(t) + defer test.Stop(func() {}) + + req := test.NewRequest(port).Route("/api/__yao/table/guard/find/1") + res, err := req.Get() + if err != nil { + t.Fatal(err) + } + assert.Equal(t, 403, res.Status()) + + req = test.NewRequest(port).Route("/api/__yao/table/guard/get") + res, err = req.Get() + if err != nil { + t.Fatal(err) + } + assert.Equal(t, 403, res.Status()) + + req = test.NewRequest(port).Route("/api/__yao/table/guard/get").Token(token(t)).Header("Unit-Test", "yes") + res, err = req.Get() + if err != nil { + t.Fatal(err) + } + assert.Equal(t, 418, res.Status()) + + req = test.NewRequest(port).Route("/api/__yao/table/guard/get").Token(token(t)) + res, err = req.Get() + if err != nil { + t.Fatal(err) + } + assert.Equal(t, 200, res.Status()) +} + func start(t *testing.T) int { port := network.FreePort() load(t) diff --git a/widgets/table/table_test.go b/widgets/table/table_test.go index ed8108d8..b50a5f6f 100644 --- a/widgets/table/table_test.go +++ b/widgets/table/table_test.go @@ -25,7 +25,7 @@ func TestLoad(t *testing.T) { if err != nil { t.Fatal(err) } - assert.Equal(t, 12, len(Tables)) + assert.Equal(t, 13, len(Tables)) } func TestLoadID(t *testing.T) { diff --git a/widgets/table/types.go b/widgets/table/types.go index e02eb9c8..db6626b0 100644 --- a/widgets/table/types.go +++ b/widgets/table/types.go @@ -25,6 +25,7 @@ type DSL struct { // ActionDSL the table action DSL type ActionDSL struct { + Guard string `json:"guard,omitempty"` // the default guard Bind *BindActionDSL `json:"bind,omitempty"` Setting *action.Process `json:"setting,omitempty"` Component *action.Process `json:"component,omitempty"`