github.com/vmware/govmomi@v0.37.2/object/authorization_manager.go (about)

     1  /*
     2  Copyright (c) 2015 VMware, Inc. All Rights Reserved.
     3  
     4  Licensed under the Apache License, Version 2.0 (the "License");
     5  you may not use this file except in compliance with the License.
     6  You may obtain a copy of the License at
     7  
     8      http://www.apache.org/licenses/LICENSE-2.0
     9  
    10  Unless required by applicable law or agreed to in writing, software
    11  distributed under the License is distributed on an "AS IS" BASIS,
    12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  See the License for the specific language governing permissions and
    14  limitations under the License.
    15  */
    16  
    17  package object
    18  
    19  import (
    20  	"context"
    21  
    22  	"github.com/vmware/govmomi/vim25"
    23  	"github.com/vmware/govmomi/vim25/methods"
    24  	"github.com/vmware/govmomi/vim25/mo"
    25  	"github.com/vmware/govmomi/vim25/types"
    26  )
    27  
    28  type AuthorizationManager struct {
    29  	Common
    30  }
    31  
    32  func NewAuthorizationManager(c *vim25.Client) *AuthorizationManager {
    33  	m := AuthorizationManager{
    34  		Common: NewCommon(c, *c.ServiceContent.AuthorizationManager),
    35  	}
    36  
    37  	return &m
    38  }
    39  
    40  type AuthorizationRoleList []types.AuthorizationRole
    41  
    42  func (l AuthorizationRoleList) ById(id int32) *types.AuthorizationRole {
    43  	for _, role := range l {
    44  		if role.RoleId == id {
    45  			return &role
    46  		}
    47  	}
    48  
    49  	return nil
    50  }
    51  
    52  func (l AuthorizationRoleList) ByName(name string) *types.AuthorizationRole {
    53  	for _, role := range l {
    54  		if role.Name == name {
    55  			return &role
    56  		}
    57  	}
    58  
    59  	return nil
    60  }
    61  
    62  func (m AuthorizationManager) RoleList(ctx context.Context) (AuthorizationRoleList, error) {
    63  	var am mo.AuthorizationManager
    64  
    65  	err := m.Properties(ctx, m.Reference(), []string{"roleList"}, &am)
    66  	if err != nil {
    67  		return nil, err
    68  	}
    69  
    70  	return AuthorizationRoleList(am.RoleList), nil
    71  }
    72  
    73  func (m AuthorizationManager) RetrieveEntityPermissions(ctx context.Context, entity types.ManagedObjectReference, inherited bool) ([]types.Permission, error) {
    74  	req := types.RetrieveEntityPermissions{
    75  		This:      m.Reference(),
    76  		Entity:    entity,
    77  		Inherited: inherited,
    78  	}
    79  
    80  	res, err := methods.RetrieveEntityPermissions(ctx, m.Client(), &req)
    81  	if err != nil {
    82  		return nil, err
    83  	}
    84  
    85  	return res.Returnval, nil
    86  }
    87  
    88  func (m AuthorizationManager) RemoveEntityPermission(ctx context.Context, entity types.ManagedObjectReference, user string, isGroup bool) error {
    89  	req := types.RemoveEntityPermission{
    90  		This:    m.Reference(),
    91  		Entity:  entity,
    92  		User:    user,
    93  		IsGroup: isGroup,
    94  	}
    95  
    96  	_, err := methods.RemoveEntityPermission(ctx, m.Client(), &req)
    97  	return err
    98  }
    99  
   100  func (m AuthorizationManager) SetEntityPermissions(ctx context.Context, entity types.ManagedObjectReference, permission []types.Permission) error {
   101  	req := types.SetEntityPermissions{
   102  		This:       m.Reference(),
   103  		Entity:     entity,
   104  		Permission: permission,
   105  	}
   106  
   107  	_, err := methods.SetEntityPermissions(ctx, m.Client(), &req)
   108  	return err
   109  }
   110  
   111  func (m AuthorizationManager) RetrieveRolePermissions(ctx context.Context, id int32) ([]types.Permission, error) {
   112  	req := types.RetrieveRolePermissions{
   113  		This:   m.Reference(),
   114  		RoleId: id,
   115  	}
   116  
   117  	res, err := methods.RetrieveRolePermissions(ctx, m.Client(), &req)
   118  	if err != nil {
   119  		return nil, err
   120  	}
   121  
   122  	return res.Returnval, nil
   123  }
   124  
   125  func (m AuthorizationManager) RetrieveAllPermissions(ctx context.Context) ([]types.Permission, error) {
   126  	req := types.RetrieveAllPermissions{
   127  		This: m.Reference(),
   128  	}
   129  
   130  	res, err := methods.RetrieveAllPermissions(ctx, m.Client(), &req)
   131  	if err != nil {
   132  		return nil, err
   133  	}
   134  
   135  	return res.Returnval, nil
   136  }
   137  
   138  func (m AuthorizationManager) AddRole(ctx context.Context, name string, ids []string) (int32, error) {
   139  	req := types.AddAuthorizationRole{
   140  		This:    m.Reference(),
   141  		Name:    name,
   142  		PrivIds: ids,
   143  	}
   144  
   145  	res, err := methods.AddAuthorizationRole(ctx, m.Client(), &req)
   146  	if err != nil {
   147  		return -1, err
   148  	}
   149  
   150  	return res.Returnval, nil
   151  }
   152  
   153  func (m AuthorizationManager) RemoveRole(ctx context.Context, id int32, failIfUsed bool) error {
   154  	req := types.RemoveAuthorizationRole{
   155  		This:       m.Reference(),
   156  		RoleId:     id,
   157  		FailIfUsed: failIfUsed,
   158  	}
   159  
   160  	_, err := methods.RemoveAuthorizationRole(ctx, m.Client(), &req)
   161  	return err
   162  }
   163  
   164  func (m AuthorizationManager) UpdateRole(ctx context.Context, id int32, name string, ids []string) error {
   165  	req := types.UpdateAuthorizationRole{
   166  		This:    m.Reference(),
   167  		RoleId:  id,
   168  		NewName: name,
   169  		PrivIds: ids,
   170  	}
   171  
   172  	_, err := methods.UpdateAuthorizationRole(ctx, m.Client(), &req)
   173  	return err
   174  }
   175  
   176  func (m AuthorizationManager) HasUserPrivilegeOnEntities(ctx context.Context, entities []types.ManagedObjectReference, userName string, privID []string) ([]types.EntityPrivilege, error) {
   177  	req := types.HasUserPrivilegeOnEntities{
   178  		This:     m.Reference(),
   179  		Entities: entities,
   180  		UserName: userName,
   181  		PrivId:   privID,
   182  	}
   183  
   184  	res, err := methods.HasUserPrivilegeOnEntities(ctx, m.Client(), &req)
   185  	if err != nil {
   186  		return nil, err
   187  	}
   188  
   189  	return res.Returnval, nil
   190  }
   191  
   192  func (m AuthorizationManager) HasPrivilegeOnEntity(ctx context.Context, entity types.ManagedObjectReference, sessionID string, privID []string) ([]bool, error) {
   193  	req := types.HasPrivilegeOnEntity{
   194  		This:      m.Reference(),
   195  		Entity:    entity,
   196  		SessionId: sessionID,
   197  		PrivId:    privID,
   198  	}
   199  
   200  	res, err := methods.HasPrivilegeOnEntity(ctx, m.Client(), &req)
   201  	if err != nil {
   202  		return nil, err
   203  	}
   204  
   205  	return res.Returnval, nil
   206  }
   207  
   208  func (m AuthorizationManager) FetchUserPrivilegeOnEntities(ctx context.Context, entities []types.ManagedObjectReference, userName string) ([]types.UserPrivilegeResult, error) {
   209  	req := types.FetchUserPrivilegeOnEntities{
   210  		This:     m.Reference(),
   211  		Entities: entities,
   212  		UserName: userName,
   213  	}
   214  
   215  	res, err := methods.FetchUserPrivilegeOnEntities(ctx, m.Client(), &req)
   216  	if err != nil {
   217  		return nil, err
   218  	}
   219  
   220  	return res.Returnval, nil
   221  }