mirror of
https://github.com/grafana/grafana.git
synced 2025-07-30 19:42:30 +08:00
74 lines
2.4 KiB
Go
74 lines
2.4 KiB
Go
package iam
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/grafana/authlib/claims"
|
|
"k8s.io/apiserver/pkg/authorization/authorizer"
|
|
|
|
"github.com/grafana/grafana/pkg/apimachinery/utils"
|
|
iamv0 "github.com/grafana/grafana/pkg/apis/iam/v0alpha1"
|
|
"github.com/grafana/grafana/pkg/registry/apis/iam/legacy"
|
|
"github.com/grafana/grafana/pkg/services/accesscontrol"
|
|
gfauthorizer "github.com/grafana/grafana/pkg/services/apiserver/auth/authorizer"
|
|
)
|
|
|
|
func newLegacyAuthorizer(ac accesscontrol.AccessControl, store legacy.LegacyIdentityStore) (authorizer.Authorizer, claims.AccessClient) {
|
|
client := accesscontrol.NewLegacyAccessClient(
|
|
ac,
|
|
accesscontrol.ResourceAuthorizerOptions{
|
|
Resource: iamv0.UserResourceInfo.GetName(),
|
|
Attr: "id",
|
|
Mapping: map[string]string{
|
|
utils.VerbGet: accesscontrol.ActionOrgUsersRead,
|
|
utils.VerbList: accesscontrol.ActionOrgUsersRead,
|
|
},
|
|
Resolver: accesscontrol.ResourceResolverFunc(func(ctx context.Context, ns claims.NamespaceInfo, name string) ([]string, error) {
|
|
res, err := store.GetUserInternalID(ctx, ns, legacy.GetUserInternalIDQuery{
|
|
UID: name,
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return []string{fmt.Sprintf("users:id:%d", res.ID)}, nil
|
|
}),
|
|
},
|
|
accesscontrol.ResourceAuthorizerOptions{
|
|
Resource: "display",
|
|
Unchecked: map[string]bool{
|
|
utils.VerbGet: true,
|
|
utils.VerbList: true,
|
|
},
|
|
},
|
|
accesscontrol.ResourceAuthorizerOptions{
|
|
Resource: iamv0.ServiceAccountResourceInfo.GetName(),
|
|
Attr: "id",
|
|
Resolver: accesscontrol.ResourceResolverFunc(func(ctx context.Context, ns claims.NamespaceInfo, name string) ([]string, error) {
|
|
res, err := store.GetServiceAccountInternalID(ctx, ns, legacy.GetServiceAccountInternalIDQuery{
|
|
UID: name,
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return []string{fmt.Sprintf("serviceaccounts:id:%d", res.ID)}, nil
|
|
}),
|
|
},
|
|
accesscontrol.ResourceAuthorizerOptions{
|
|
Resource: iamv0.TeamResourceInfo.GetName(),
|
|
Attr: "id",
|
|
Resolver: accesscontrol.ResourceResolverFunc(func(ctx context.Context, ns claims.NamespaceInfo, name string) ([]string, error) {
|
|
res, err := store.GetTeamInternalID(ctx, ns, legacy.GetTeamInternalIDQuery{
|
|
UID: name,
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
return []string{fmt.Sprintf("teams:id:%d", res.ID)}, nil
|
|
}),
|
|
},
|
|
)
|
|
|
|
return gfauthorizer.NewResourceAuthorizer(client), client
|
|
}
|