mirror of
https://github.com/zitadel/zitadel.git
synced 2024-12-12 11:04:25 +00:00
69 lines
1.7 KiB
Go
69 lines
1.7 KiB
Go
|
package object
|
||
|
|
||
|
import (
|
||
|
"github.com/dop251/goja"
|
||
|
|
||
|
"github.com/zitadel/zitadel/internal/actions"
|
||
|
"github.com/zitadel/zitadel/internal/domain"
|
||
|
)
|
||
|
|
||
|
type UserGrants struct {
|
||
|
UserGrants []UserGrant
|
||
|
}
|
||
|
|
||
|
type UserGrant struct {
|
||
|
ProjectID string
|
||
|
ProjectGrantID string
|
||
|
Roles []string
|
||
|
}
|
||
|
|
||
|
func AppendGrantFunc(userGrants *UserGrants) func(c *actions.FieldConfig) func(call goja.FunctionCall) goja.Value {
|
||
|
return func(c *actions.FieldConfig) func(call goja.FunctionCall) goja.Value {
|
||
|
return func(call goja.FunctionCall) goja.Value {
|
||
|
firstArg := objectFromFirstArgument(call, c.Runtime)
|
||
|
grant := UserGrant{}
|
||
|
mapObjectToGrant(firstArg, &grant)
|
||
|
userGrants.UserGrants = append(userGrants.UserGrants, grant)
|
||
|
return nil
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func mapObjectToGrant(object *goja.Object, grant *UserGrant) {
|
||
|
for _, key := range object.Keys() {
|
||
|
switch key {
|
||
|
case "projectId":
|
||
|
grant.ProjectID = object.Get(key).String()
|
||
|
case "projectGrantId":
|
||
|
grant.ProjectGrantID = object.Get(key).String()
|
||
|
case "roles":
|
||
|
if roles, ok := object.Get(key).Export().([]interface{}); ok {
|
||
|
for _, role := range roles {
|
||
|
if r, ok := role.(string); ok {
|
||
|
grant.Roles = append(grant.Roles, r)
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if grant.ProjectID == "" {
|
||
|
panic("projectId not set")
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func UserGrantsToDomain(userID string, actionUserGrants []UserGrant) []*domain.UserGrant {
|
||
|
if actionUserGrants == nil {
|
||
|
return nil
|
||
|
}
|
||
|
userGrants := make([]*domain.UserGrant, len(actionUserGrants))
|
||
|
for i, grant := range actionUserGrants {
|
||
|
userGrants[i] = &domain.UserGrant{
|
||
|
UserID: userID,
|
||
|
ProjectID: grant.ProjectID,
|
||
|
ProjectGrantID: grant.ProjectGrantID,
|
||
|
RoleKeys: grant.Roles,
|
||
|
}
|
||
|
}
|
||
|
return userGrants
|
||
|
}
|