首页 > 解决方案 > 如何在函数中将字符串值转换为自定义类型

问题描述

我编写了一个用于角色检查的函数:

...
role = "roles/cloudkms.publicKeyViewer"
func checkRole(key, serviceAccount, role string) bool {
...
return policy.HasRole(serviceAccount, role)
}

然后我收到错误“不能在 policy.HasRole 的参数中使用角色(类型字符串)作为类型“cloud.google.com/go/iam”.RoleName。

将角色值转换为自定义类型的正确方法是什么?

图书馆

// A RoleName is a name representing a collection of permissions.
type RoleName string

// Common role names.
const (
    Owner  RoleName = "roles/owner"
    Editor RoleName = "roles/editor"
    Viewer RoleName = "roles/viewer"
)

const (
    // AllUsers is a special member that denotes all users, even unauthenticated ones.
    AllUsers = "allUsers"

    // AllAuthenticatedUsers is a special member that denotes all authenticated users.
    AllAuthenticatedUsers = "allAuthenticatedUsers"
)


// HasRole reports whether member has role r.
func (p *Policy) HasRole(member string, r RoleName) bool {
    return memberIndex(member, p.binding(r)) >= 0
}

标签: gogoogle-iamgoogle-cloud-iam

解决方案


您可以使用类型转换,如下所示:

return policy.HasRole(serviceAccount, iam.RoleName(role))

或者通过将角色声明为更简单iam.RoleName

func checkRole(key, serviceAccount, role iam.RoleName) bool {
...
   return policy.HasRole(serviceAccount, role)
}

推荐阅读