System wide RBAC changes
This commit is contained in:
@@ -5,7 +5,6 @@ import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"github.com/PaesslerAG/gval"
|
||||
"io"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
@@ -14,6 +13,7 @@ import (
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
"github.com/PaesslerAG/gval"
|
||||
"github.com/cortezaproject/corteza-server/pkg/errors"
|
||||
"github.com/cortezaproject/corteza-server/pkg/handle"
|
||||
"github.com/spf13/cast"
|
||||
|
||||
+14
-5
@@ -2,8 +2,9 @@ package expr
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/PaesslerAG/gval"
|
||||
"reflect"
|
||||
|
||||
"github.com/PaesslerAG/gval"
|
||||
)
|
||||
|
||||
func ArrayFunctions() []gval.Language {
|
||||
@@ -113,14 +114,22 @@ func count(arr interface{}, v ...interface{}) (count int, err error) {
|
||||
return
|
||||
}
|
||||
|
||||
// has finds any occurrence of the values in slice
|
||||
func has(arr interface{}, v ...interface{}) (b bool, err error) {
|
||||
if arr, err = toSlice(arr); err != nil {
|
||||
// has finds any occurrence of the values in slice or key in a map
|
||||
func has(arr interface{}, vv ...interface{}) (b bool, err error) {
|
||||
arr = UntypedValue(arr)
|
||||
|
||||
if isMap(arr) {
|
||||
for _, v := range vv {
|
||||
if reflect.ValueOf(arr).MapIndex(reflect.ValueOf(v)).IsValid() {
|
||||
return true, nil
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
|
||||
var c int
|
||||
if c, err = count(arr, v...); err != nil {
|
||||
if c, err = count(arr, vv...); err != nil {
|
||||
return
|
||||
}
|
||||
|
||||
|
||||
@@ -312,6 +312,16 @@ func Test_has(t *testing.T) {
|
||||
val: []interface{}{0.1, 1.1},
|
||||
expect: false,
|
||||
},
|
||||
{
|
||||
arr: map[string]interface{}{"a": 1},
|
||||
val: []interface{}{"a", "b"},
|
||||
expect: true,
|
||||
},
|
||||
{
|
||||
arr: map[string]interface{}{"a": 1},
|
||||
val: []interface{}{"b"},
|
||||
expect: false,
|
||||
},
|
||||
}
|
||||
|
||||
for p, tc := range tcc {
|
||||
|
||||
@@ -106,6 +106,10 @@ func isSlice(v interface{}) bool {
|
||||
return reflect.TypeOf(v).Kind() == reflect.Slice || reflect.TypeOf(v).Kind() == reflect.Array
|
||||
}
|
||||
|
||||
func isMap(v interface{}) bool {
|
||||
return reflect.TypeOf(v).Kind() == reflect.Map
|
||||
}
|
||||
|
||||
// toArray removes expr types (if wrapped) and checks if the variable is slice
|
||||
// internal only
|
||||
//
|
||||
|
||||
+2
-1
@@ -3,6 +3,7 @@ package expr
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
|
||||
"github.com/PaesslerAG/gval"
|
||||
)
|
||||
|
||||
@@ -85,7 +86,7 @@ func Parser(ll ...gval.Language) gval.Language {
|
||||
func AllFunctions() []gval.Language {
|
||||
ff := make([]gval.Language, 0, 100)
|
||||
|
||||
//ff = append(ff, GenericFunctions()...)
|
||||
ff = append(ff, GenericFunctions()...)
|
||||
ff = append(ff, StringFunctions()...)
|
||||
ff = append(ff, JsonFunctions()...)
|
||||
ff = append(ff, NumericFunctions()...)
|
||||
|
||||
Reference in New Issue
Block a user