Some checks failed
SonarQube / SonarQube (push) Failing after 5m28s
E2e test on main branch push / server and client test (map[name:admin port:8080]) (push) Failing after 3m33s
Server and lib tests / Library test (js) (push) Failing after 1m36s
Server and lib tests / Library test (vue) (push) Successful in 2m24s
Server and lib tests / Web client test (admin) (push) Successful in 2m52s
Server and lib tests / Web client test (compose) (push) Successful in 3m23s
Server and lib tests / Web client test (discovery) (push) Successful in 2m49s
Server and lib tests / Web client test (one) (push) Successful in 2m52s
Server and lib tests / Web client test (privacy) (push) Successful in 2m44s
Server and lib tests / Web client test (reporter) (push) Successful in 2m56s
Server and lib tests / Web client test (workflow) (push) Successful in 3m0s
Server and lib tests / Server tests (push) Failing after 4m55s
E2e test on main branch push / notify-failure (push) Failing after 9s
Server and lib tests / Send matrix testing notification (push) Successful in 2s
Mark stale issues and pull requests / stale (push) Successful in 40s
70 lines
2.1 KiB
Go
70 lines
2.1 KiB
Go
package rest
|
|
|
|
import (
|
|
"context"
|
|
"github.com/cortezaproject/corteza/server/federation/rest/request"
|
|
"github.com/cortezaproject/corteza/server/federation/service"
|
|
"github.com/cortezaproject/corteza/server/federation/types"
|
|
"github.com/cortezaproject/corteza/server/pkg/api"
|
|
"github.com/cortezaproject/corteza/server/pkg/rbac"
|
|
)
|
|
|
|
type (
|
|
Permissions struct {
|
|
ac permissionsAccessController
|
|
}
|
|
|
|
permissionsAccessController interface {
|
|
Effective(context.Context, ...rbac.Resource) rbac.EffectiveSet
|
|
Trace(context.Context, uint64, []uint64, ...string) ([]*rbac.Trace, error)
|
|
List() []map[string]string
|
|
FindRulesByRoleID(context.Context, uint64) (rbac.RuleSet, error)
|
|
FindRules(ctx context.Context, roleID uint64, rr ...string) (rbac.RuleSet, error)
|
|
Grant(ctx context.Context, rr ...*rbac.Rule) error
|
|
}
|
|
)
|
|
|
|
func (Permissions) New() *Permissions {
|
|
return &Permissions{
|
|
ac: service.DefaultAccessControl,
|
|
}
|
|
}
|
|
|
|
func (ctrl Permissions) Effective(ctx context.Context, r *request.PermissionsEffective) (interface{}, error) {
|
|
return ctrl.ac.Effective(ctx, types.Component{}), nil
|
|
}
|
|
|
|
func (ctrl Permissions) Trace(ctx context.Context, r *request.PermissionsTrace) (interface{}, error) {
|
|
return ctrl.ac.Trace(ctx, r.UserID, r.RoleID, r.Resource...)
|
|
}
|
|
|
|
func (ctrl Permissions) List(ctx context.Context, r *request.PermissionsList) (interface{}, error) {
|
|
return ctrl.ac.List(), nil
|
|
}
|
|
|
|
func (ctrl Permissions) Read(ctx context.Context, r *request.PermissionsRead) (interface{}, error) {
|
|
return ctrl.ac.FindRules(ctx, r.RoleID, r.Resource...)
|
|
}
|
|
|
|
func (ctrl Permissions) Delete(ctx context.Context, r *request.PermissionsDelete) (interface{}, error) {
|
|
rr, err := ctrl.ac.FindRulesByRoleID(ctx, r.RoleID)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
for _, r := range rr {
|
|
r.Access = rbac.Inherit
|
|
}
|
|
|
|
return api.OK(), ctrl.ac.Grant(ctx, rr...)
|
|
}
|
|
|
|
func (ctrl Permissions) Update(ctx context.Context, r *request.PermissionsUpdate) (interface{}, error) {
|
|
for _, rule := range r.Rules {
|
|
// Make sure everything is properly set
|
|
rule.RoleID = r.RoleID
|
|
}
|
|
|
|
return api.OK(), ctrl.ac.Grant(ctx, r.Rules...)
|
|
}
|