
# 创建并管理角色
#### 创建角色
**db.createRole(role, writeConcern)**
- 参数role为必选参数，类型为文档，详情如下：
  ```
  {
    role: "<name>",
    privileges: [
       { resource: { <resource> }, actions: [ "<action>", ... ] },
       ...
    ],
    roles: [
       { role: "<role>", db: "<database>" } | "<role>",
        ...
    ],
    authenticationRestrictions: [
      {
        clientSource: ["<IP>" | "<CIDR range>", ...],
        serverAddress: ["<IP>" | "<CIDR range>", ...]
      },
      ...
    ]
  }
  ```
  各参数及含义如下：
  
  | 字段                         | 类型     | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
  |:---|:---|:---|
  | role                       | string | 角色名称                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
  | privileges                 | 数组     | 必选参数，数组元素为角色具备的权限。 该参数设置为空集合意味着该角色无任何权限。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
  | resource                   | 文档     | 用于指定库名或者集合名                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
  | actions                    | 数组     | 对应资源可用的操作列表, 常用action如下： - find  - count  - getMore  - listDatabases  - listCollections  - listIndexes  - insert  - update  - remove   更多actions请参见[官方文档](https://docs.mongodb.com/v4.0/reference/privilege-actions/)。 |
  | roles                      | 数组     | 必选参数，数组元素为角色继承的角色名。 可以是系统预置的角色read或者readWrite，也可以是用户自定义的角色。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
  | authenticationRestrictions | 数组     | 可选。用于指定该角色可接入的IP地址或者IP地址段。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
     
  

- writeConcern可选参数用来指定命令的write concern的等级。
 
#### 更新角色
**db.grantPrivilegesToRole(rolename,privileges,writeConcern)**
**db.revokePrivilegesFromRole(rolename,privileges,writeConcern)**
上述命令用户给角色获取或者回收指定的权限。
- 参数rolename为必选参数，用于指定待更新的角色名称。
- 参数privileges为角色待调整的权限。
  ```
  db.grantPrivilegesToRole(
      "< rolename >",
      [
          { resource: { <resource> }, actions: [ "<action>", ... ] },
          ...
      ],
      { < writeConcern > }
  )
  ```
  表1privileges各字段含义 
  | 字段       | 类型 | 说明                 |
  |:---|:---|:---|
  | resource | 文档 | 用于指定库名或者集合名        |
  | actions  | 数组 | 参考createRole章节的说明。 |
     
  
除了上述命令，还支持updateRole对角色信息整体更新。
**db.updateRole(role, update, writeConcern)**
表2参数说明 
| 字段           | 类型     | 说明                                               |
|:---|:---|:---|
| role         | string | 角色名称                                             |
| update       | 数组     | 必选参数，与创建角色命令的privileges参与含义一致。用于整体替换对应角色的全部权限信息。 |
| writeConcern | 文档     | 可选参数用来指定命令的write concern 的等级                     |
   
#### 删除角色
**db.dropRole(rolename, writeConcern)**
- 参数rolename为必选参数，待删除的角色名称。
- writeConcern可选参数用来指定命令的write concern的等级。
 
