# coding=utf-8
# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. ***
# *** Do not edit by hand unless you're certain you know what you are doing! ***

import builtins
import copy
import warnings
import sys
import pulumi
import pulumi.runtime
from typing import Any, Mapping, Optional, Sequence, Union, overload
if sys.version_info >= (3, 11):
    from typing import NotRequired, TypedDict, TypeAlias
else:
    from typing_extensions import NotRequired, TypedDict, TypeAlias
from .. import _utilities

__all__ = ['PermissionArgs', 'Permission']

@pulumi.input_type
class PermissionArgs:
    def __init__(__self__, *,
                 authorizer_id: Optional[pulumi.Input[builtins.int]] = None,
                 authorizer_type: Optional[pulumi.Input[builtins.str]] = None,
                 cluster_id: Optional[pulumi.Input[builtins.str]] = None,
                 grantee_id: Optional[pulumi.Input[builtins.int]] = None,
                 grantee_type: Optional[pulumi.Input[builtins.str]] = None,
                 is_custom_role: Optional[pulumi.Input[builtins.bool]] = None,
                 namespace: Optional[pulumi.Input[builtins.str]] = None,
                 role_domain: Optional[pulumi.Input[builtins.str]] = None,
                 role_name: Optional[pulumi.Input[builtins.str]] = None):
        """
        The set of arguments for constructing a Permission resource.
        :param pulumi.Input[builtins.int] authorizer_id: 授权者的 ID。可以是 IAM 用户 ID，也可以是 IAM 角色 ID。
        :param pulumi.Input[builtins.str] authorizer_type: 授权者的类型，取值如下：User：IAM 用户。Role：IAM 角色。Account：账号。
        :param pulumi.Input[builtins.str] cluster_id: 需要授权给 IAM 用户或角色的集群 ID。roleDomain为namespace或cluster时必须填写该参数值。
        :param pulumi.Input[builtins.int] grantee_id: 被授权者的 ID。可以是 IAM 用户 ID，也可以是 IAM 角色 ID。
        :param pulumi.Input[builtins.str] grantee_type: 被授权者的类型，取值如下：User：IAM 用户。Role：IAM 角色。Account：账号。
        :param pulumi.Input[builtins.bool] is_custom_role: 给被授权者授予的 RBAC 角色是否为自定义角色，取值如下：true：自定义角色。false：（默认值）系统预置的角色。
        :param pulumi.Input[builtins.str] namespace: 需要授权给 IAM 用户或角色的名空间名称。roleDomain等于namespace时必须填写该参数值。roleDomain不等于namespace时，填写该参数值不生效。
        :param pulumi.Input[builtins.str] role_domain: 为 IAM 用户或角色授予的权限类型，取值如下：namespace：授予命名空间级别的权限。cluster：授予集群级别的权限。all_clusters：授予当前账号下全部集群级别的权限。
        :param pulumi.Input[builtins.str] role_name: 给被授权者授予的 RBAC 角色名称。目前必须填写该参数。当roleDomain为all_clusters时，不可以自定义角色名称。
        """
        if authorizer_id is not None:
            pulumi.set(__self__, "authorizer_id", authorizer_id)
        if authorizer_type is not None:
            pulumi.set(__self__, "authorizer_type", authorizer_type)
        if cluster_id is not None:
            pulumi.set(__self__, "cluster_id", cluster_id)
        if grantee_id is not None:
            pulumi.set(__self__, "grantee_id", grantee_id)
        if grantee_type is not None:
            pulumi.set(__self__, "grantee_type", grantee_type)
        if is_custom_role is not None:
            pulumi.set(__self__, "is_custom_role", is_custom_role)
        if namespace is not None:
            pulumi.set(__self__, "namespace", namespace)
        if role_domain is not None:
            pulumi.set(__self__, "role_domain", role_domain)
        if role_name is not None:
            pulumi.set(__self__, "role_name", role_name)

    @property
    @pulumi.getter(name="authorizerId")
    def authorizer_id(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        授权者的 ID。可以是 IAM 用户 ID，也可以是 IAM 角色 ID。
        """
        return pulumi.get(self, "authorizer_id")

    @authorizer_id.setter
    def authorizer_id(self, value: Optional[pulumi.Input[builtins.int]]):
        pulumi.set(self, "authorizer_id", value)

    @property
    @pulumi.getter(name="authorizerType")
    def authorizer_type(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        授权者的类型，取值如下：User：IAM 用户。Role：IAM 角色。Account：账号。
        """
        return pulumi.get(self, "authorizer_type")

    @authorizer_type.setter
    def authorizer_type(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "authorizer_type", value)

    @property
    @pulumi.getter(name="clusterId")
    def cluster_id(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        需要授权给 IAM 用户或角色的集群 ID。roleDomain为namespace或cluster时必须填写该参数值。
        """
        return pulumi.get(self, "cluster_id")

    @cluster_id.setter
    def cluster_id(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "cluster_id", value)

    @property
    @pulumi.getter(name="granteeId")
    def grantee_id(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        被授权者的 ID。可以是 IAM 用户 ID，也可以是 IAM 角色 ID。
        """
        return pulumi.get(self, "grantee_id")

    @grantee_id.setter
    def grantee_id(self, value: Optional[pulumi.Input[builtins.int]]):
        pulumi.set(self, "grantee_id", value)

    @property
    @pulumi.getter(name="granteeType")
    def grantee_type(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        被授权者的类型，取值如下：User：IAM 用户。Role：IAM 角色。Account：账号。
        """
        return pulumi.get(self, "grantee_type")

    @grantee_type.setter
    def grantee_type(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "grantee_type", value)

    @property
    @pulumi.getter(name="isCustomRole")
    def is_custom_role(self) -> Optional[pulumi.Input[builtins.bool]]:
        """
        给被授权者授予的 RBAC 角色是否为自定义角色，取值如下：true：自定义角色。false：（默认值）系统预置的角色。
        """
        return pulumi.get(self, "is_custom_role")

    @is_custom_role.setter
    def is_custom_role(self, value: Optional[pulumi.Input[builtins.bool]]):
        pulumi.set(self, "is_custom_role", value)

    @property
    @pulumi.getter
    def namespace(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        需要授权给 IAM 用户或角色的名空间名称。roleDomain等于namespace时必须填写该参数值。roleDomain不等于namespace时，填写该参数值不生效。
        """
        return pulumi.get(self, "namespace")

    @namespace.setter
    def namespace(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "namespace", value)

    @property
    @pulumi.getter(name="roleDomain")
    def role_domain(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        为 IAM 用户或角色授予的权限类型，取值如下：namespace：授予命名空间级别的权限。cluster：授予集群级别的权限。all_clusters：授予当前账号下全部集群级别的权限。
        """
        return pulumi.get(self, "role_domain")

    @role_domain.setter
    def role_domain(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "role_domain", value)

    @property
    @pulumi.getter(name="roleName")
    def role_name(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        给被授权者授予的 RBAC 角色名称。目前必须填写该参数。当roleDomain为all_clusters时，不可以自定义角色名称。
        """
        return pulumi.get(self, "role_name")

    @role_name.setter
    def role_name(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "role_name", value)


@pulumi.input_type
class _PermissionState:
    def __init__(__self__, *,
                 authorized_at: Optional[pulumi.Input[builtins.str]] = None,
                 authorizer_id: Optional[pulumi.Input[builtins.int]] = None,
                 authorizer_name: Optional[pulumi.Input[builtins.str]] = None,
                 authorizer_type: Optional[pulumi.Input[builtins.str]] = None,
                 cluster_id: Optional[pulumi.Input[builtins.str]] = None,
                 created_time: Optional[pulumi.Input[builtins.str]] = None,
                 grantee_id: Optional[pulumi.Input[builtins.int]] = None,
                 grantee_type: Optional[pulumi.Input[builtins.str]] = None,
                 is_custom_role: Optional[pulumi.Input[builtins.bool]] = None,
                 kube_role_binding_name: Optional[pulumi.Input[builtins.str]] = None,
                 message: Optional[pulumi.Input[builtins.str]] = None,
                 namespace: Optional[pulumi.Input[builtins.str]] = None,
                 permission_id: Optional[pulumi.Input[builtins.str]] = None,
                 project_selector: Optional[pulumi.Input[builtins.str]] = None,
                 revoked_at: Optional[pulumi.Input[builtins.str]] = None,
                 role_domain: Optional[pulumi.Input[builtins.str]] = None,
                 role_name: Optional[pulumi.Input[builtins.str]] = None,
                 status: Optional[pulumi.Input[builtins.str]] = None):
        """
        Input properties used for looking up and filtering Permission resources.
        :param pulumi.Input[builtins.str] authorized_at: RBAC 权限策略资源被授权的时间。
        :param pulumi.Input[builtins.int] authorizer_id: 授权者的 ID。可以是 IAM 用户 ID，也可以是 IAM 角色 ID。
        :param pulumi.Input[builtins.str] authorizer_name: 授权者名称
        :param pulumi.Input[builtins.str] authorizer_type: 授权者的类型，取值如下：User：IAM 用户。Role：IAM 角色。Account：账号。
        :param pulumi.Input[builtins.str] cluster_id: 需要授权给 IAM 用户或角色的集群 ID。roleDomain为namespace或cluster时必须填写该参数值。
        :param pulumi.Input[builtins.str] created_time: RBAC 权限策略资源创建的时间。
        :param pulumi.Input[builtins.int] grantee_id: 被授权者的 ID。可以是 IAM 用户 ID，也可以是 IAM 角色 ID。
        :param pulumi.Input[builtins.str] grantee_type: 被授权者的类型，取值如下：User：IAM 用户。Role：IAM 角色。Account：账号。
        :param pulumi.Input[builtins.bool] is_custom_role: 给被授权者授予的 RBAC 角色是否为自定义角色，取值如下：true：自定义角色。false：（默认值）系统预置的角色。
        :param pulumi.Input[builtins.str] kube_role_binding_name: RBAC 权限策略资源在 Kubernetes 中的对象名称。
        :param pulumi.Input[builtins.str] message: 授权详细消息。
        :param pulumi.Input[builtins.str] namespace: 需要授权给 IAM 用户或角色的名空间名称。roleDomain等于namespace时必须填写该参数值。roleDomain不等于namespace时，填写该参数值不生效。
        :param pulumi.Input[builtins.str] permission_id: RBAC 权限策略资源 ID。
        :param pulumi.Input[builtins.str] project_selector: 项目选择器
        :param pulumi.Input[builtins.str] revoked_at: 撤销授权的时间。
        :param pulumi.Input[builtins.str] role_domain: 为 IAM 用户或角色授予的权限类型，取值如下：namespace：授予命名空间级别的权限。cluster：授予集群级别的权限。all_clusters：授予当前账号下全部集群级别的权限。
        :param pulumi.Input[builtins.str] role_name: 给被授权者授予的 RBAC 角色名称。目前必须填写该参数。当roleDomain为all_clusters时，不可以自定义角色名称。
        :param pulumi.Input[builtins.str] status: RBAC 权限访问策略资源的状态，取值如下：Success：授权成功。Failed：授权失败。Pending：授权中。PartialSuccess：部分授权成功。
        """
        if authorized_at is not None:
            pulumi.set(__self__, "authorized_at", authorized_at)
        if authorizer_id is not None:
            pulumi.set(__self__, "authorizer_id", authorizer_id)
        if authorizer_name is not None:
            pulumi.set(__self__, "authorizer_name", authorizer_name)
        if authorizer_type is not None:
            pulumi.set(__self__, "authorizer_type", authorizer_type)
        if cluster_id is not None:
            pulumi.set(__self__, "cluster_id", cluster_id)
        if created_time is not None:
            pulumi.set(__self__, "created_time", created_time)
        if grantee_id is not None:
            pulumi.set(__self__, "grantee_id", grantee_id)
        if grantee_type is not None:
            pulumi.set(__self__, "grantee_type", grantee_type)
        if is_custom_role is not None:
            pulumi.set(__self__, "is_custom_role", is_custom_role)
        if kube_role_binding_name is not None:
            pulumi.set(__self__, "kube_role_binding_name", kube_role_binding_name)
        if message is not None:
            pulumi.set(__self__, "message", message)
        if namespace is not None:
            pulumi.set(__self__, "namespace", namespace)
        if permission_id is not None:
            pulumi.set(__self__, "permission_id", permission_id)
        if project_selector is not None:
            pulumi.set(__self__, "project_selector", project_selector)
        if revoked_at is not None:
            pulumi.set(__self__, "revoked_at", revoked_at)
        if role_domain is not None:
            pulumi.set(__self__, "role_domain", role_domain)
        if role_name is not None:
            pulumi.set(__self__, "role_name", role_name)
        if status is not None:
            pulumi.set(__self__, "status", status)

    @property
    @pulumi.getter(name="authorizedAt")
    def authorized_at(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        RBAC 权限策略资源被授权的时间。
        """
        return pulumi.get(self, "authorized_at")

    @authorized_at.setter
    def authorized_at(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "authorized_at", value)

    @property
    @pulumi.getter(name="authorizerId")
    def authorizer_id(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        授权者的 ID。可以是 IAM 用户 ID，也可以是 IAM 角色 ID。
        """
        return pulumi.get(self, "authorizer_id")

    @authorizer_id.setter
    def authorizer_id(self, value: Optional[pulumi.Input[builtins.int]]):
        pulumi.set(self, "authorizer_id", value)

    @property
    @pulumi.getter(name="authorizerName")
    def authorizer_name(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        授权者名称
        """
        return pulumi.get(self, "authorizer_name")

    @authorizer_name.setter
    def authorizer_name(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "authorizer_name", value)

    @property
    @pulumi.getter(name="authorizerType")
    def authorizer_type(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        授权者的类型，取值如下：User：IAM 用户。Role：IAM 角色。Account：账号。
        """
        return pulumi.get(self, "authorizer_type")

    @authorizer_type.setter
    def authorizer_type(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "authorizer_type", value)

    @property
    @pulumi.getter(name="clusterId")
    def cluster_id(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        需要授权给 IAM 用户或角色的集群 ID。roleDomain为namespace或cluster时必须填写该参数值。
        """
        return pulumi.get(self, "cluster_id")

    @cluster_id.setter
    def cluster_id(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "cluster_id", value)

    @property
    @pulumi.getter(name="createdTime")
    def created_time(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        RBAC 权限策略资源创建的时间。
        """
        return pulumi.get(self, "created_time")

    @created_time.setter
    def created_time(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "created_time", value)

    @property
    @pulumi.getter(name="granteeId")
    def grantee_id(self) -> Optional[pulumi.Input[builtins.int]]:
        """
        被授权者的 ID。可以是 IAM 用户 ID，也可以是 IAM 角色 ID。
        """
        return pulumi.get(self, "grantee_id")

    @grantee_id.setter
    def grantee_id(self, value: Optional[pulumi.Input[builtins.int]]):
        pulumi.set(self, "grantee_id", value)

    @property
    @pulumi.getter(name="granteeType")
    def grantee_type(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        被授权者的类型，取值如下：User：IAM 用户。Role：IAM 角色。Account：账号。
        """
        return pulumi.get(self, "grantee_type")

    @grantee_type.setter
    def grantee_type(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "grantee_type", value)

    @property
    @pulumi.getter(name="isCustomRole")
    def is_custom_role(self) -> Optional[pulumi.Input[builtins.bool]]:
        """
        给被授权者授予的 RBAC 角色是否为自定义角色，取值如下：true：自定义角色。false：（默认值）系统预置的角色。
        """
        return pulumi.get(self, "is_custom_role")

    @is_custom_role.setter
    def is_custom_role(self, value: Optional[pulumi.Input[builtins.bool]]):
        pulumi.set(self, "is_custom_role", value)

    @property
    @pulumi.getter(name="kubeRoleBindingName")
    def kube_role_binding_name(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        RBAC 权限策略资源在 Kubernetes 中的对象名称。
        """
        return pulumi.get(self, "kube_role_binding_name")

    @kube_role_binding_name.setter
    def kube_role_binding_name(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "kube_role_binding_name", value)

    @property
    @pulumi.getter
    def message(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        授权详细消息。
        """
        return pulumi.get(self, "message")

    @message.setter
    def message(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "message", value)

    @property
    @pulumi.getter
    def namespace(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        需要授权给 IAM 用户或角色的名空间名称。roleDomain等于namespace时必须填写该参数值。roleDomain不等于namespace时，填写该参数值不生效。
        """
        return pulumi.get(self, "namespace")

    @namespace.setter
    def namespace(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "namespace", value)

    @property
    @pulumi.getter(name="permissionId")
    def permission_id(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        RBAC 权限策略资源 ID。
        """
        return pulumi.get(self, "permission_id")

    @permission_id.setter
    def permission_id(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "permission_id", value)

    @property
    @pulumi.getter(name="projectSelector")
    def project_selector(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        项目选择器
        """
        return pulumi.get(self, "project_selector")

    @project_selector.setter
    def project_selector(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "project_selector", value)

    @property
    @pulumi.getter(name="revokedAt")
    def revoked_at(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        撤销授权的时间。
        """
        return pulumi.get(self, "revoked_at")

    @revoked_at.setter
    def revoked_at(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "revoked_at", value)

    @property
    @pulumi.getter(name="roleDomain")
    def role_domain(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        为 IAM 用户或角色授予的权限类型，取值如下：namespace：授予命名空间级别的权限。cluster：授予集群级别的权限。all_clusters：授予当前账号下全部集群级别的权限。
        """
        return pulumi.get(self, "role_domain")

    @role_domain.setter
    def role_domain(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "role_domain", value)

    @property
    @pulumi.getter(name="roleName")
    def role_name(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        给被授权者授予的 RBAC 角色名称。目前必须填写该参数。当roleDomain为all_clusters时，不可以自定义角色名称。
        """
        return pulumi.get(self, "role_name")

    @role_name.setter
    def role_name(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "role_name", value)

    @property
    @pulumi.getter
    def status(self) -> Optional[pulumi.Input[builtins.str]]:
        """
        RBAC 权限访问策略资源的状态，取值如下：Success：授权成功。Failed：授权失败。Pending：授权中。PartialSuccess：部分授权成功。
        """
        return pulumi.get(self, "status")

    @status.setter
    def status(self, value: Optional[pulumi.Input[builtins.str]]):
        pulumi.set(self, "status", value)


@pulumi.type_token("bytepluscc:vke/permission:Permission")
class Permission(pulumi.CustomResource):
    @overload
    def __init__(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 authorizer_id: Optional[pulumi.Input[builtins.int]] = None,
                 authorizer_type: Optional[pulumi.Input[builtins.str]] = None,
                 cluster_id: Optional[pulumi.Input[builtins.str]] = None,
                 grantee_id: Optional[pulumi.Input[builtins.int]] = None,
                 grantee_type: Optional[pulumi.Input[builtins.str]] = None,
                 is_custom_role: Optional[pulumi.Input[builtins.bool]] = None,
                 namespace: Optional[pulumi.Input[builtins.str]] = None,
                 role_domain: Optional[pulumi.Input[builtins.str]] = None,
                 role_name: Optional[pulumi.Input[builtins.str]] = None,
                 __props__=None):
        """
        容器服务提供集群 RBAC 授权功能，为 IAM 用户或角色授予 RBAC 访问权限，包括可访问的资源、权限的作用范围、预置的角色类型等，从而更好地管理集群的安全访问控制，满足企业用户细粒度的资源访问权限控制需求。

        ## Example Usage

        ```python
        import pulumi
        import pulumi_bytepluscc as bytepluscc

        v_ke_permission_demo = bytepluscc.vke.Permission("VKEPermissionDemo",
            role_domain="namespace",
            cluster_id="cd48m3cb1b2ba7l6ebgp0xxxxx",
            namespace="kube-public",
            role_name="vke:visitor",
            is_custom_role=False,
            grantee_id=59433888,
            grantee_type="User")
        ```

        ## Import

        ```sh
        $ pulumi import bytepluscc:vke/permission:Permission example "permission_id"
        ```

        :param str resource_name: The name of the resource.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[builtins.int] authorizer_id: 授权者的 ID。可以是 IAM 用户 ID，也可以是 IAM 角色 ID。
        :param pulumi.Input[builtins.str] authorizer_type: 授权者的类型，取值如下：User：IAM 用户。Role：IAM 角色。Account：账号。
        :param pulumi.Input[builtins.str] cluster_id: 需要授权给 IAM 用户或角色的集群 ID。roleDomain为namespace或cluster时必须填写该参数值。
        :param pulumi.Input[builtins.int] grantee_id: 被授权者的 ID。可以是 IAM 用户 ID，也可以是 IAM 角色 ID。
        :param pulumi.Input[builtins.str] grantee_type: 被授权者的类型，取值如下：User：IAM 用户。Role：IAM 角色。Account：账号。
        :param pulumi.Input[builtins.bool] is_custom_role: 给被授权者授予的 RBAC 角色是否为自定义角色，取值如下：true：自定义角色。false：（默认值）系统预置的角色。
        :param pulumi.Input[builtins.str] namespace: 需要授权给 IAM 用户或角色的名空间名称。roleDomain等于namespace时必须填写该参数值。roleDomain不等于namespace时，填写该参数值不生效。
        :param pulumi.Input[builtins.str] role_domain: 为 IAM 用户或角色授予的权限类型，取值如下：namespace：授予命名空间级别的权限。cluster：授予集群级别的权限。all_clusters：授予当前账号下全部集群级别的权限。
        :param pulumi.Input[builtins.str] role_name: 给被授权者授予的 RBAC 角色名称。目前必须填写该参数。当roleDomain为all_clusters时，不可以自定义角色名称。
        """
        ...
    @overload
    def __init__(__self__,
                 resource_name: str,
                 args: Optional[PermissionArgs] = None,
                 opts: Optional[pulumi.ResourceOptions] = None):
        """
        容器服务提供集群 RBAC 授权功能，为 IAM 用户或角色授予 RBAC 访问权限，包括可访问的资源、权限的作用范围、预置的角色类型等，从而更好地管理集群的安全访问控制，满足企业用户细粒度的资源访问权限控制需求。

        ## Example Usage

        ```python
        import pulumi
        import pulumi_bytepluscc as bytepluscc

        v_ke_permission_demo = bytepluscc.vke.Permission("VKEPermissionDemo",
            role_domain="namespace",
            cluster_id="cd48m3cb1b2ba7l6ebgp0xxxxx",
            namespace="kube-public",
            role_name="vke:visitor",
            is_custom_role=False,
            grantee_id=59433888,
            grantee_type="User")
        ```

        ## Import

        ```sh
        $ pulumi import bytepluscc:vke/permission:Permission example "permission_id"
        ```

        :param str resource_name: The name of the resource.
        :param PermissionArgs args: The arguments to use to populate this resource's properties.
        :param pulumi.ResourceOptions opts: Options for the resource.
        """
        ...
    def __init__(__self__, resource_name: str, *args, **kwargs):
        resource_args, opts = _utilities.get_resource_args_opts(PermissionArgs, pulumi.ResourceOptions, *args, **kwargs)
        if resource_args is not None:
            __self__._internal_init(resource_name, opts, **resource_args.__dict__)
        else:
            __self__._internal_init(resource_name, *args, **kwargs)

    def _internal_init(__self__,
                 resource_name: str,
                 opts: Optional[pulumi.ResourceOptions] = None,
                 authorizer_id: Optional[pulumi.Input[builtins.int]] = None,
                 authorizer_type: Optional[pulumi.Input[builtins.str]] = None,
                 cluster_id: Optional[pulumi.Input[builtins.str]] = None,
                 grantee_id: Optional[pulumi.Input[builtins.int]] = None,
                 grantee_type: Optional[pulumi.Input[builtins.str]] = None,
                 is_custom_role: Optional[pulumi.Input[builtins.bool]] = None,
                 namespace: Optional[pulumi.Input[builtins.str]] = None,
                 role_domain: Optional[pulumi.Input[builtins.str]] = None,
                 role_name: Optional[pulumi.Input[builtins.str]] = None,
                 __props__=None):
        opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts)
        if not isinstance(opts, pulumi.ResourceOptions):
            raise TypeError('Expected resource options to be a ResourceOptions instance')
        if opts.id is None:
            if __props__ is not None:
                raise TypeError('__props__ is only valid when passed in combination with a valid opts.id to get an existing resource')
            __props__ = PermissionArgs.__new__(PermissionArgs)

            __props__.__dict__["authorizer_id"] = authorizer_id
            __props__.__dict__["authorizer_type"] = authorizer_type
            __props__.__dict__["cluster_id"] = cluster_id
            __props__.__dict__["grantee_id"] = grantee_id
            __props__.__dict__["grantee_type"] = grantee_type
            __props__.__dict__["is_custom_role"] = is_custom_role
            __props__.__dict__["namespace"] = namespace
            __props__.__dict__["role_domain"] = role_domain
            __props__.__dict__["role_name"] = role_name
            __props__.__dict__["authorized_at"] = None
            __props__.__dict__["authorizer_name"] = None
            __props__.__dict__["created_time"] = None
            __props__.__dict__["kube_role_binding_name"] = None
            __props__.__dict__["message"] = None
            __props__.__dict__["permission_id"] = None
            __props__.__dict__["project_selector"] = None
            __props__.__dict__["revoked_at"] = None
            __props__.__dict__["status"] = None
        super(Permission, __self__).__init__(
            'bytepluscc:vke/permission:Permission',
            resource_name,
            __props__,
            opts)

    @staticmethod
    def get(resource_name: str,
            id: pulumi.Input[str],
            opts: Optional[pulumi.ResourceOptions] = None,
            authorized_at: Optional[pulumi.Input[builtins.str]] = None,
            authorizer_id: Optional[pulumi.Input[builtins.int]] = None,
            authorizer_name: Optional[pulumi.Input[builtins.str]] = None,
            authorizer_type: Optional[pulumi.Input[builtins.str]] = None,
            cluster_id: Optional[pulumi.Input[builtins.str]] = None,
            created_time: Optional[pulumi.Input[builtins.str]] = None,
            grantee_id: Optional[pulumi.Input[builtins.int]] = None,
            grantee_type: Optional[pulumi.Input[builtins.str]] = None,
            is_custom_role: Optional[pulumi.Input[builtins.bool]] = None,
            kube_role_binding_name: Optional[pulumi.Input[builtins.str]] = None,
            message: Optional[pulumi.Input[builtins.str]] = None,
            namespace: Optional[pulumi.Input[builtins.str]] = None,
            permission_id: Optional[pulumi.Input[builtins.str]] = None,
            project_selector: Optional[pulumi.Input[builtins.str]] = None,
            revoked_at: Optional[pulumi.Input[builtins.str]] = None,
            role_domain: Optional[pulumi.Input[builtins.str]] = None,
            role_name: Optional[pulumi.Input[builtins.str]] = None,
            status: Optional[pulumi.Input[builtins.str]] = None) -> 'Permission':
        """
        Get an existing Permission resource's state with the given name, id, and optional extra
        properties used to qualify the lookup.

        :param str resource_name: The unique name of the resulting resource.
        :param pulumi.Input[str] id: The unique provider ID of the resource to lookup.
        :param pulumi.ResourceOptions opts: Options for the resource.
        :param pulumi.Input[builtins.str] authorized_at: RBAC 权限策略资源被授权的时间。
        :param pulumi.Input[builtins.int] authorizer_id: 授权者的 ID。可以是 IAM 用户 ID，也可以是 IAM 角色 ID。
        :param pulumi.Input[builtins.str] authorizer_name: 授权者名称
        :param pulumi.Input[builtins.str] authorizer_type: 授权者的类型，取值如下：User：IAM 用户。Role：IAM 角色。Account：账号。
        :param pulumi.Input[builtins.str] cluster_id: 需要授权给 IAM 用户或角色的集群 ID。roleDomain为namespace或cluster时必须填写该参数值。
        :param pulumi.Input[builtins.str] created_time: RBAC 权限策略资源创建的时间。
        :param pulumi.Input[builtins.int] grantee_id: 被授权者的 ID。可以是 IAM 用户 ID，也可以是 IAM 角色 ID。
        :param pulumi.Input[builtins.str] grantee_type: 被授权者的类型，取值如下：User：IAM 用户。Role：IAM 角色。Account：账号。
        :param pulumi.Input[builtins.bool] is_custom_role: 给被授权者授予的 RBAC 角色是否为自定义角色，取值如下：true：自定义角色。false：（默认值）系统预置的角色。
        :param pulumi.Input[builtins.str] kube_role_binding_name: RBAC 权限策略资源在 Kubernetes 中的对象名称。
        :param pulumi.Input[builtins.str] message: 授权详细消息。
        :param pulumi.Input[builtins.str] namespace: 需要授权给 IAM 用户或角色的名空间名称。roleDomain等于namespace时必须填写该参数值。roleDomain不等于namespace时，填写该参数值不生效。
        :param pulumi.Input[builtins.str] permission_id: RBAC 权限策略资源 ID。
        :param pulumi.Input[builtins.str] project_selector: 项目选择器
        :param pulumi.Input[builtins.str] revoked_at: 撤销授权的时间。
        :param pulumi.Input[builtins.str] role_domain: 为 IAM 用户或角色授予的权限类型，取值如下：namespace：授予命名空间级别的权限。cluster：授予集群级别的权限。all_clusters：授予当前账号下全部集群级别的权限。
        :param pulumi.Input[builtins.str] role_name: 给被授权者授予的 RBAC 角色名称。目前必须填写该参数。当roleDomain为all_clusters时，不可以自定义角色名称。
        :param pulumi.Input[builtins.str] status: RBAC 权限访问策略资源的状态，取值如下：Success：授权成功。Failed：授权失败。Pending：授权中。PartialSuccess：部分授权成功。
        """
        opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id))

        __props__ = _PermissionState.__new__(_PermissionState)

        __props__.__dict__["authorized_at"] = authorized_at
        __props__.__dict__["authorizer_id"] = authorizer_id
        __props__.__dict__["authorizer_name"] = authorizer_name
        __props__.__dict__["authorizer_type"] = authorizer_type
        __props__.__dict__["cluster_id"] = cluster_id
        __props__.__dict__["created_time"] = created_time
        __props__.__dict__["grantee_id"] = grantee_id
        __props__.__dict__["grantee_type"] = grantee_type
        __props__.__dict__["is_custom_role"] = is_custom_role
        __props__.__dict__["kube_role_binding_name"] = kube_role_binding_name
        __props__.__dict__["message"] = message
        __props__.__dict__["namespace"] = namespace
        __props__.__dict__["permission_id"] = permission_id
        __props__.__dict__["project_selector"] = project_selector
        __props__.__dict__["revoked_at"] = revoked_at
        __props__.__dict__["role_domain"] = role_domain
        __props__.__dict__["role_name"] = role_name
        __props__.__dict__["status"] = status
        return Permission(resource_name, opts=opts, __props__=__props__)

    @property
    @pulumi.getter(name="authorizedAt")
    def authorized_at(self) -> pulumi.Output[builtins.str]:
        """
        RBAC 权限策略资源被授权的时间。
        """
        return pulumi.get(self, "authorized_at")

    @property
    @pulumi.getter(name="authorizerId")
    def authorizer_id(self) -> pulumi.Output[builtins.int]:
        """
        授权者的 ID。可以是 IAM 用户 ID，也可以是 IAM 角色 ID。
        """
        return pulumi.get(self, "authorizer_id")

    @property
    @pulumi.getter(name="authorizerName")
    def authorizer_name(self) -> pulumi.Output[builtins.str]:
        """
        授权者名称
        """
        return pulumi.get(self, "authorizer_name")

    @property
    @pulumi.getter(name="authorizerType")
    def authorizer_type(self) -> pulumi.Output[builtins.str]:
        """
        授权者的类型，取值如下：User：IAM 用户。Role：IAM 角色。Account：账号。
        """
        return pulumi.get(self, "authorizer_type")

    @property
    @pulumi.getter(name="clusterId")
    def cluster_id(self) -> pulumi.Output[builtins.str]:
        """
        需要授权给 IAM 用户或角色的集群 ID。roleDomain为namespace或cluster时必须填写该参数值。
        """
        return pulumi.get(self, "cluster_id")

    @property
    @pulumi.getter(name="createdTime")
    def created_time(self) -> pulumi.Output[builtins.str]:
        """
        RBAC 权限策略资源创建的时间。
        """
        return pulumi.get(self, "created_time")

    @property
    @pulumi.getter(name="granteeId")
    def grantee_id(self) -> pulumi.Output[builtins.int]:
        """
        被授权者的 ID。可以是 IAM 用户 ID，也可以是 IAM 角色 ID。
        """
        return pulumi.get(self, "grantee_id")

    @property
    @pulumi.getter(name="granteeType")
    def grantee_type(self) -> pulumi.Output[builtins.str]:
        """
        被授权者的类型，取值如下：User：IAM 用户。Role：IAM 角色。Account：账号。
        """
        return pulumi.get(self, "grantee_type")

    @property
    @pulumi.getter(name="isCustomRole")
    def is_custom_role(self) -> pulumi.Output[builtins.bool]:
        """
        给被授权者授予的 RBAC 角色是否为自定义角色，取值如下：true：自定义角色。false：（默认值）系统预置的角色。
        """
        return pulumi.get(self, "is_custom_role")

    @property
    @pulumi.getter(name="kubeRoleBindingName")
    def kube_role_binding_name(self) -> pulumi.Output[builtins.str]:
        """
        RBAC 权限策略资源在 Kubernetes 中的对象名称。
        """
        return pulumi.get(self, "kube_role_binding_name")

    @property
    @pulumi.getter
    def message(self) -> pulumi.Output[builtins.str]:
        """
        授权详细消息。
        """
        return pulumi.get(self, "message")

    @property
    @pulumi.getter
    def namespace(self) -> pulumi.Output[builtins.str]:
        """
        需要授权给 IAM 用户或角色的名空间名称。roleDomain等于namespace时必须填写该参数值。roleDomain不等于namespace时，填写该参数值不生效。
        """
        return pulumi.get(self, "namespace")

    @property
    @pulumi.getter(name="permissionId")
    def permission_id(self) -> pulumi.Output[builtins.str]:
        """
        RBAC 权限策略资源 ID。
        """
        return pulumi.get(self, "permission_id")

    @property
    @pulumi.getter(name="projectSelector")
    def project_selector(self) -> pulumi.Output[builtins.str]:
        """
        项目选择器
        """
        return pulumi.get(self, "project_selector")

    @property
    @pulumi.getter(name="revokedAt")
    def revoked_at(self) -> pulumi.Output[builtins.str]:
        """
        撤销授权的时间。
        """
        return pulumi.get(self, "revoked_at")

    @property
    @pulumi.getter(name="roleDomain")
    def role_domain(self) -> pulumi.Output[builtins.str]:
        """
        为 IAM 用户或角色授予的权限类型，取值如下：namespace：授予命名空间级别的权限。cluster：授予集群级别的权限。all_clusters：授予当前账号下全部集群级别的权限。
        """
        return pulumi.get(self, "role_domain")

    @property
    @pulumi.getter(name="roleName")
    def role_name(self) -> pulumi.Output[builtins.str]:
        """
        给被授权者授予的 RBAC 角色名称。目前必须填写该参数。当roleDomain为all_clusters时，不可以自定义角色名称。
        """
        return pulumi.get(self, "role_name")

    @property
    @pulumi.getter
    def status(self) -> pulumi.Output[builtins.str]:
        """
        RBAC 权限访问策略资源的状态，取值如下：Success：授权成功。Failed：授权失败。Pending：授权中。PartialSuccess：部分授权成功。
        """
        return pulumi.get(self, "status")

