| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- // Copyright 2019 Yunion
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- package policy
- import (
- "context"
- "yunion.io/x/pkg/gotypes"
- "yunion.io/x/pkg/util/rbacscope"
- "yunion.io/x/onecloud/pkg/mcclient"
- "yunion.io/x/onecloud/pkg/mcclient/auth"
- )
- type SPolicyTokenCredential struct {
- // usage embedded interface
- mcclient.TokenCredential
- }
- func (self *SPolicyTokenCredential) HasSystemAdminPrivilege() bool {
- return PolicyManager.IsScopeCapable(self.TokenCredential, rbacscope.ScopeSystem)
- }
- /*func (self *SPolicyTokenCredential) IsAllow(targetScope rbacscope.TRbacScope, service string, resource string, action string, extra ...string) rbacutils.SPolicyResult {
- allowScope, result := PolicyManager.AllowScope(self.TokenCredential, service, resource, action, extra...)
- if result.Result == rbacutils.Allow && !targetScope.HigherThan(allowScope) {
- return result
- }
- return rbacutils.PolicyDeny
- }*/
- func init() {
- gotypes.RegisterSerializableTransformer(mcclient.TokenCredentialType, func(input gotypes.ISerializable) gotypes.ISerializable {
- // log.Debugf("do TokenCredential transform for %#v", input)
- switch val := input.(type) {
- case *mcclient.SSimpleToken:
- return &SPolicyTokenCredential{val}
- default:
- return val
- }
- })
- }
- func FilterPolicyCredential(token mcclient.TokenCredential) mcclient.TokenCredential {
- switch token.(type) {
- case *SPolicyTokenCredential:
- return token
- default:
- return &SPolicyTokenCredential{TokenCredential: token}
- }
- }
- func FetchUserCredential(ctx context.Context) mcclient.TokenCredential {
- token := auth.FetchUserCredential(ctx, FilterPolicyCredential)
- return token
- }
|