---
features:
  - |
    Merged ``RbacUtils`` and ``RbacUtilsMixin`` classes. Now there is only
    ``RbacUtilsMixin`` class. The new class still provides all functionality of
    the original ``RbacUtils`` class. New implementation simplifies the usage
    of the rbac utils:

    * there is no need in calling ``cls.setup_rbac_utils()`` function, because
      it happens automatically at the ``setup_clients`` step.

    * there is no ``rbac_utils`` variable, so if you need to call a
      ``override_role`` function, just do it using ``self``:

      .. code-block:: python

          with self.override_role():
              ...

    * there is no need in ``test_obj`` variable for ``override_role`` function,
      because it can use ``self``.

upgrade:
  - Remove usage of ``cls.setup_rbac_utils()`` function.
  - |
    Remove usage of ``self.rbac_utils`` variable:

    .. code-block:: python

        with self.rbac_utils.override_role(self):

    convert to

    .. code-block:: python

        with self.override_role():

  - |
    Remove ``test_obj`` in usage of ``override_role`` context manager:

    .. code-block:: python

        with self.override_role(self):

    convert to

    .. code-block:: python

        with self.override_role():
