MCPcopy Create free account
hub / github.com/cloudwan/gohan / GetSchema

Function GetSchema

server/editor.go:28–68  ·  view source on GitHub ↗

GetSchema returns the schema filtered and trimmed for a specific user or nil when the user shouldn't see it at all

(s *schema.Schema, authorization schema.Authorization)

Source from the content-addressed store, hash-verified

26
27//GetSchema returns the schema filtered and trimmed for a specific user or nil when the user shouldn't see it at all
28func GetSchema(s *schema.Schema, authorization schema.Authorization) (result *schema.Resource, err error) {
29 manager := schema.GetManager()
30 metaschema, _ := manager.Schema("schema")
31 policy, _ := manager.PolicyValidate("read", s.GetPluralURL(), authorization)
32 if policy == nil {
33 return
34 }
35 if s.IsAbstract() {
36 return
37 }
38 rawSchema := s.JSON()
39 filteredSchema := util.ExtendMap(nil, s.JSONSchema)
40 rawSchema["schema"] = filteredSchema
41 schemaProperties, schemaPropertiesOrder, schemaRequired := policy.FilterSchema(
42 util.MaybeMap(deepcopy.Copy(s.JSONSchema["properties"])),
43 util.MaybeStringList(s.JSONSchema["propertiesOrder"]),
44 util.MaybeStringList(s.JSONSchema["required"]))
45
46 filteredSchema["properties"] = schemaProperties
47 filteredSchema["propertiesOrder"] = schemaPropertiesOrder
48 filteredSchema["required"] = schemaRequired
49
50 permission := []string{}
51 defaultFilter := schema.CreateExcludeAllFilter()
52 for _, action := range schema.AllActions {
53 if p, _ := manager.PolicyValidate(action, s.GetPluralURL(), authorization); p != nil {
54 permission = append(permission, action)
55 filterPermission(action, schemaProperties, p.GetPropertyFilter())
56 } else {
57 filterPermission(action, schemaProperties, defaultFilter)
58 }
59 }
60 filteredSchema["permission"] = permission
61
62 result, err = schema.NewResource(metaschema, rawSchema)
63 if err != nil {
64 log.Warning("%s %s", result, err)
65 return
66 }
67 return
68}
69
70func filterPermission(action string, schemaProperties map[string]interface{}, filter *schema.Filter) {
71 for property, rawPermissions := range schemaProperties {

Callers 2

setupEditorFunction · 0.85
TestGetSchemaFunction · 0.85

Calls 11

filterPermissionFunction · 0.85
PolicyValidateMethod · 0.80
GetPluralURLMethod · 0.80
IsAbstractMethod · 0.80
JSONMethod · 0.80
FilterSchemaMethod · 0.80
MaybeMapMethod · 0.80
GetPropertyFilterMethod · 0.80
SchemaMethod · 0.65
CopyMethod · 0.65
WarningMethod · 0.65

Tested by 1

TestGetSchemaFunction · 0.68