Как настроить панель инструментов 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')
Но это тоже не работает.... плз, помогите мне