> For the complete documentation index, see [llms.txt](https://developer.collibra.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://developer.collibra.com/workflows/designing-workflows/processes/shape-repository/service-task/delegates/addresourcerole-and-removeresourcerole-delegates.md).

# AddResourceRole and RemoveResourceRole delegates

The **AddResourceRole** and **RemoveResourceRole** delegate respectively adds and removes the user as the member with the role to the resource. Matched/removed member is returned with output variable.

| Field name         | Required | Description                                                                                                                  |
| ------------------ | -------- | ---------------------------------------------------------------------------------------------------------------------------- |
| resourceId         | Yes      | Id of the resource for the member.                                                                                           |
| roleId             | Yes      | Identify the member role - either id or name must be set, setting both will cause id to be used.                             |
| roleName           |          |                                                                                                                              |
| userId             | Yes      | Identify the member user - either id or name must be set, setting both will cause id to be used.                             |
| userName           |          |                                                                                                                              |
| resultVariableName | No       | The name of the variable that the result will be set in, if not given the result will be set in the variable named "output". |

The delegate is deprecated. Replace your service task containing this delegate with a script task, for example:

* Add resource role:

  ```
  \<scriptTask id="scripttask1" name="Assign owner" scriptFormat="groovy" activiti:autoStoreVariables="false"\>
      \<script\><![CDATA[
          import com.collibra.dgc.core.api.dto.instance.responsibility.AddResponsibilityRequest
          def userName = execution.getVariable("startUser")
          def ownerUserId = userApi.getUserByUsername(userName).getId();           
          responsibilityApi.addResponsibility(AddResponsibilityRequest.builder()
              .resourceId(item.id)
              .resourceType(item.type)
              .roleId(string2Uuid(roleId))
              .ownerId(ownerUserId)
              .build())
      ]]>\</script\>
  \</scriptTask\>
  ```
* Remove resource role:

  ```
  \<scriptTask id="scripttask1" name="Remove current Owner role" scriptFormat="groovy" activiti:autoStoreVariables="false"\>
      \<script\><![CDATA[
          import com.collibra.dgc.core.api.dto.instance.responsibility.FindResponsibilitiesRequest
          def ownerUserId = userApi.getUserByUsername(ownerName).getId();
          def ownerRoleId = users.getRoleId("Owner");
          def responsibilities = responsibilityApi.findResponsibilities(FindResponsibilitiesRequest.builder()
              .resourceIds(Collections.singletonList(domain.id))
              .ownerIds(Collections.singletonList(ownerUserId))
              .roleIds(Collections.singletonList(ownerRoleId))
              .build())
           .getResults()
          responsibilityApi.removeResponsibilities(new ArrayList(responsibilities.collect{ it.getId() }));
      ]]>\</script\>
  \</scriptTask\>
  ```
