async def METHOD_NAME(self, acl, action, **kwargs):
    """Grants or revokes the given access level of this user on model, offer or controller,
    depending on the access level (see the access module)
    :param str acl: Access control level
    :param str action: 'grant' or 'revoke'
    Depending on the access level, the available keyword parameters are:
    :param str model_name: name of the model if acl is one of model access levels
    :param str offer_url: url for the offer if acl is one of offer access levels
    :return: True if access changed, False if user already has it
    """
    try:
        if 'model_name' in kwargs:
            return await self.modify_model_access(acl, action, kwargs['model_name'])
        elif 'offer_url' in kwargs:
            return await self.modify_offer_access(acl, action, kwargs['offer_url'])
        else:
            return await self.modify_controller_access(acl, action)
    except errors.JujuError as e:
        if 'user already has' in str(e):
            return False
        else:
            raise