# Role events

| Event                         | Dispatched by                   | Properties                                                                                    |
| ----------------------------- | ------------------------------- | --------------------------------------------------------------------------------------------- |
| `BeforeCreateRoleDraftEvent`  | `RoleService::createRoleDraft`  | \`Role $role\`\`RoleDraft                                                                     |
| `CreateRoleDraftEvent`        | `RoleService::createRoleDraft`  | ``` Role $role``RoleDraft $roleDraft ```                                                      |
| `BeforeCreateRoleEvent`       | `RoleService::createRole`       | \`RoleCreateStruct $roleCreateStruct\`\`RoleDraft                                             |
| `CreateRoleEvent`             | `RoleService::createRole`       | ``` RoleCreateStruct $roleCreateStruct``RoleDraft $roleDraft ```                              |
| `BeforeUpdateRoleDraftEvent`  | `RoleService::updateRoleDraft`  | \`RoleDraft $roleDraft`RoleUpdateStruct $roleUpdateStruct`RoleDraft                           |
| `UpdateRoleDraftEvent`        | `RoleService::updateRoleDraft`  | ``` RoleDraft $roleDraft``RoleUpdateStruct $roleUpdateStruct``RoleDraft $updatedRoleDraft ``` |
| `BeforeCopyRoleEvent`         | `RoleService::copyRole`         | \`Role $role`RoleCopyStruct $roleCopyStruct`Role                                              |
| `CopyRoleEvent`               | `RoleService::copyRole`         | ``` Role $copiedRole``Role $role``RoleCopyStruct $roleCopyStruct ```                          |
| `BeforePublishRoleDraftEvent` | `RoleService::publishRoleDraft` | `RoleDraft $roleDraft`                                                                        |
| `PublishRoleDraftEvent`       | `RoleService::publishRoleDraft` | `RoleDraft $roleDraft`                                                                        |
| `BeforeDeleteRoleDraftEvent`  | `RoleService::deleteRoleDraft`  | `RoleDraft $roleDraft`                                                                        |
| `DeleteRoleDraftEvent`        | `RoleService::deleteRoleDraft`  | `RoleDraft $roleDraft`                                                                        |
| `BeforeDeleteRoleEvent`       | `RoleService::deleteRole`       | `Role $role`                                                                                  |
| `DeleteRoleEvent`             | `RoleService::deleteRole`       | `Role $role`                                                                                  |

## Adding policies

| Event                                | Dispatched by                          | Properties                                                                                                                 |
| ------------------------------------ | -------------------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| `BeforeAddPolicyByRoleDraftEvent`    | `RoleService::addPolicyByRoleDraft`    | \`RoleDraft $roleDraft`PolicyCreateStruct $policyCreateStruct`RoleDraft                                                    |
| `AddPolicyByRoleDraftEvent`          | `RoleService::addPolicyByRoleDraft`    | ``` RoleDraft $roleDraft``PolicyCreateStruct $policyCreateStruct``private $updatedRoleDraft ```                            |
| `BeforeUpdatePolicyByRoleDraftEvent` | `RoleService::updatePolicyByRoleDraft` | \`RoleDraft $roleDraft`PolicyDraft $policy`PolicyUpdateStruct $policyUpdateStruct\`\`PolicyDraft                           |
| `UpdatePolicyByRoleDraftEvent`       | `RoleService::updatePolicyByRoleDraft` | ``` RoleDraft $roleDraft``PolicyDraft $policy``PolicyUpdateStruct $policyUpdateStruct``PolicyDraft $updatedPolicyDraft ``` |
| `BeforeRemovePolicyByRoleDraftEvent` | `RoleService::removePolicyByRoleDraft` | \`RoleDraft $roleDraft`PolicyDraft $policyDraft`RoleDraft                                                                  |
| `RemovePolicyByRoleDraftEvent`       | `RoleService::removePolicyByRoleDraft` | ``` RoleDraft $roleDraft``PolicyDraft $policyDraft``RoleDraft $updatedRoleDraft ```                                        |

## Assigning roles

| Event                              | Dispatched by                        | Properties                                                                          |
| ---------------------------------- | ------------------------------------ | ----------------------------------------------------------------------------------- |
| `BeforeAssignRoleToUserEvent`      | `RoleService::assignRoleToUser`      | ``` Role $role``User $user``Limitation\RoleLimitation $roleLimitation ```           |
| `AssignRoleToUserEvent`            | `RoleService::assignRoleToUser`      | ``` Role $role``User $user``Limitation\RoleLimitation $roleLimitation ```           |
| `BeforeAssignRoleToUserGroupEvent` | `RoleService::assignRoleToUserGroup` | ``` Role $role``UserGroup $userGroup``Limitation\RoleLimitation $roleLimitation ``` |
| `AssignRoleToUserGroupEvent`       | `RoleService::assignRoleToUserGroup` | ``` Role $role``UserGroup $userGroup``Limitation\RoleLimitation $roleLimitation ``` |
| `BeforeRemoveRoleAssignmentEvent`  | `RoleService::removeRoleAssignment`  | `RoleAssignment $roleAssignment`                                                    |
| `RemoveRoleAssignmentEvent`        | `RoleService::removeRoleAssignment`  | `RoleAssignment $roleAssignment`                                                    |
