
# CodeArts IDE Online自定义权限策略
如果系统预置的权限策略，不满足用户授权需求，CodeArts IDE Online支持自定义权限策略。
- 自定义权限策略中可以添加的授权项请参考[策略及授权项说明](https://support.huaweicloud.com/api-cloudide/cloudide_03_0028.html)。
- 自定义权限策略具体创建步骤请参见[创建自定义策略](https://support.huaweicloud.com/usermanual-iam/iam_01_0605.html)。
本章为您介绍CodeArts IDE Online常用的自定义权限策略代码样例。
#### 自定义策略样例
- 授权用户创建、启动、停止、访问和查看权限。
  ```
  { 
      "Version": "1.1", 
      "Statement": [ 
          { 
              "Effect": "Allow", 
              "Action": [ 
                       "cloudIDE:instance:create",
                       "cloudIDE:instance:start",
                       "cloudIDE:instance:stop",
                       "cloudIDE:instance:access",
                       "cloudIDE:instance:get"
              ] 
          } 
      ] 
  }
  ```
  

- 授权用户使用CodeArts IDE Online所有权限。
  ```
  {
      "Version": "1.1",
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "cloudIDE:*:*"
              ]
          }
      ]
  }
  ```
  

- 禁止用户删除CodeArts IDE Online实例。 用户被授予的策略中，一个授权项的作用如果同时存在Allow和Deny，则遵循Deny优先原则。因此禁止策略需要同时配合其他策略使用，否则没有实际作用。
  例如：如果授予用户CloudIDE FullAccess的系统策略，但不希望用户拥有CloudIDE FullAccess中定义的删除CodeArts IDE Online实例权限，可以创建一条禁止删除CodeArts IDE Online实例的自定义策略，同时将CloudIDE FullAccess和禁止策略授予用户，根据Deny优先原则，则用户可以对CodeArts IDE Online执行除了CodeArts IDE Online实例外的所有操作。禁止策略示例如下：
  ```
  {
      "Version": "1.1",
      "Statement": [
          {
              "Effect": "Deny",
              "Action": [
                  "cloudIDE:instance:delete"
              ]
          }
      ]
  }
  ```
  

- 仅允许用户启动、停止自己拥有的实例或被分发给自己的实例。 可以在自定义策略中为启动和停止实例的授权项添加条件，使该授权项仅对用户自己的实例生效。CodeArts IDE Online通过IAM预置了两组条件键，其与授权项的关联关系详见[CodeArts IDE Online权限](https://support.huaweicloud.com/productdesc-cloudide/rights_management.html#section0)表4 授权项与对应条件键，您可以使用条件键检查请求者的id，然后再允许执行操作。为了保证数据安全，CodeArts IDE Online只允许实例的访问者访问实例，如果用户不是实例的访问者，即使配置权限也无法访问该实例。条件策略示例如下：
  ```
  {
      "Version": "1.1",
      "Statement": [
          {
              "Effect": "Allow",
              "Action": [
                  "cloudIDE:instance:start",
                  "cloudIDE:instance:stop"
              ],
              "Condition": {
                  "StringEquals": {
                      "cloudIDE:instanceUser": ["${g:UserId}"]
                  }
              }
          },{
              "Effect": "Allow",
              "Action": [
                  "cloudIDE:instance:start",
                  "cloudIDE:instance:stop"
              ],
              "Condition": {
                  "StringEquals": {
                      "cloudIDE:instanceVisitor": ["${g:UserId}"]
                  }
              }
          }
      ]
  }
  ```
  
 
