ovirt筆記:基於ovirt4.0的虛擬資源管理的權限分析

前言

虛擬資源管理平臺是在ovirt4.0的基礎上開發的,從原有的一個admin用戶擴展成三個管理員用戶和普通用戶,下面簡單分析一下其實現權限管理的原理。sql

數據庫表

主要包括三張表:roles(角色表)、roles_group(角色與操做組關係表)、permissions(權限表)
角色RoleType有五種:SystemAdmin、SecurityAdmin、AuditAdmin、UserRole、QuotaConsumer數據庫

  • roles

clipboard.png

  • roles_group角色與操做組關係表(操做組id就是actionGroup中的id,也就是動做組的id,)

clipboard.png

  • permissions權限信息表(也至關於角色和用戶的關聯表,表示某個用戶擁有對某個操做對象的權限,操做對香指存儲,虛擬機,模板等對象)

clipboard.png

定義操做:

經過VdcActionType進行操做自定義,經過枚舉設置操做與操做組的從屬關係,而ActionGroup是定義操做組(或者說動做組)
好比瘦客thinClient做爲一個操做組,則其包括好多種操做,好比登陸VdcLogin和退出VdcLogout等等spa

// VdcLogin
    VdcLogin(5003, ActionGroup.THINCLIENT, QuotaDependency.NONE),
    VdcLogout(5004, ActionGroup.THINCLIENT, QuotaDependency.NONE),

clipboard.png

  • 經過00500_insert_roles.sql初始化角色權限

clipboard.png

  • 權限驗證事務:系統中全部操做Command都提供getPermissionCheckSubjects方法,用來定義執行操做的權限列表

clipboard.png
permissionList權限列表中,包含權限對象PermissionSubject,權限對象的屬性以下:code

clipboard.png

  • 在系統的各類command的執行時,會檢測權限,每一個操做Command執行,必須定義操做權限列表,不然會直接提示沒有操做權限:

clipboard.png

  • 最終經過存儲過程進行權限查詢get_entity_permissions

clipboard.png
clipboard.png

clipboard.png

知足權限的條件判斷(1,2必須知足,3,4,5知足其中一個)對象

  1. 系統登陸用戶系統登陸用戶(user_id) 所屬的 角色(role),必須與 操做組(action_group_id) 在 roles_groups 表中有對應關係

role_id IN( SELECT role_id FROM roles_groups WHERE action_group_id = v_action_group_id)
2.必須擁有須要刪除的虛擬機的權限( 或者 所屬羣集、數據中心的權限。有待探討)
AND (object_id IN(SELECT id FROM fn_get_entity_parents(v_object_id,v_object_type_id)))
3.功能分配了everyone權限
v_everyone_object_id := getGlobalIds('everyone');
ad_element_id = v_everyone_object_id
4.功能分配了該登陸用戶的權限
ad_element_id = v_user_id
5.功能分配了該登陸用戶所屬用戶組的權限
ad_element_id IN(SELECT * FROM getUserAndGroupsById(v_user_id)事務

權限的增長和刪除:

經過 AddPermissionCommand操做添加權限
clipboard.png
經過RemovePermissionCommand的paramPermission操做刪除權限,根據權限ID刪除
getDbFacade().getPermissionDao().remove(perms.getId());ip

相關文章
相關標籤/搜索