Как настроить панель инструментов Openstack в зависимости от роли пользователя

Я пытаюсь настроить панель инструментов openstack

Я хочу отразить следующие вещи.

1) сделать пользователя 'pm' и назначить роль 'project_manager' пользователю 'pm'

2) создать тестовый проект и добавить пользователя 'pm' для тестирования участников проекта (назначьте только роль 'project_manager' пользователю 'pm')

3) когда я вхожу в систему как пользователь 'pm' и нажимаю вкладку 'Проекты', 'Пользователи' или 'Группы', я хочу показать проекты, пользователей и группы, связанные с пользователем pm.

-> В частности, если пользователь admin добавил пользователя 'pm' в проект 'test', пользователь 'pm' сможет видеть только проект 'test' на вкладке Project. А затем пользователь 'pm' создает группу с именем 'freshman_group' и добавляет некоторых учеников в эту группу. В результате пользователь 'pm' может видеть 'freshman_group' и пользователей (добавленных в 'freshman_group'), связанных с проектом 'test'

Также я не хочу видеть проекты других пользователей, группы и пользователей..

Может быть возможно сделать эти вещи?

Если вы знаете, пожалуйста, дайте мне знать.. Я борюсь с этим в течение 2 недель..


Что я уже пробовал

/openstack_dashboard/api/keystone.py

...

def user_delete(request, user_id):
    keystoneclient(request, admin=True).users.delete(user_id)


@profiler.trace
def user_get(request, user_id, admin=True):
    user = keystoneclient(request, admin=admin).users.get(user_id)
    return VERSIONS.upgrade_v2_user(user)

...

@profiler.trace
def group_get(request, group_id, admin=True):
    manager = keystoneclient(request, admin=admin).groups
    return manager.get(group_id)


@profiler.trace
def group_delete(request, group_id):
    manager = keystoneclient(request, admin=True).groups
    return manager.delete(group_id)

...

Эти методы в основном используются keystoneclient метод с admin=True, Так что я думаю, что я должен добавить admin а также project_manager роль в pm пользователь (я упоминал ранее). Тем самым, pm пользователь может использовать такие методы, как group_list, add_group_user скоро. (как администратор)

Но когда я добавил project_manager а также admin роль в pm пользователь, keystone_policy.json не работает


Это часть моего keystone_policy.json

"admin_required": "role:admin",
"pm_required": "role:project_manager",
"admin_and_owner":"rule:admin_required and rule:owner",

...

"identity:get_group": "rule:admin_required or rule:pm_required",
"identity:list_groups": "rule:admin_required or rule:pm_required",
"identity:list_groups_for_user": "rule:admin_or_owner",
"identity:create_group": "rule:admin_required",
"identity:update_group": "rule:admin_required",
"identity:delete_group": "rule:admin_required",
"identity:list_users_in_group": "rule:admin_required",
"identity:remove_user_from_group": "rule:admin_required",
"identity:check_user_in_group": "rule:admin_required",
"identity:add_user_to_group": "rule:admin_required",

Но я получил сообщение "Несанкционированный. Пожалуйста, попробуйте войти снова". Эта ошибка возникает в следующем коде.

/openstack_dashboard/api/keystone.py

def keystoneclient(request, admin=False):
    client_version = VERSIONS.get_active_version()
    user = request.user
    token_id = user.token.id

    if is_multi_domain_enabled():
        # Cloud Admin, Domain Admin or Mixed Domain Admin
        if is_domain_admin(request):
            domain_token = request.session.get('domain_token')
            if domain_token:
                token_id = getattr(domain_token, 'auth_token', None)

    if admin:
        if not policy.check((("identity", "admin_required"),), request):
            raise exceptions.NotAuthorized 
        endpoint_type = 'adminURL'
    else:
        endpoint_type = getattr(settings,
                                'OPENSTACK_ENDPOINT_TYPE',
                                'publicURL')

Я изменил код выше, как показано ниже

    if admin:
        if not policy.check((("identity", "admin_required"),), request):
            if not policy.check((("identity", "pm_required"),), request):
                raise exceptions.NotAuthorized 
        endpoint_type = 'adminURL'
    else:
        endpoint_type = getattr(settings,
                                'OPENSTACK_ENDPOINT_TYPE',
                                'publicURL')

Но это тоже не работает.... плз, помогите мне

0 ответов

Другие вопросы по тегам