虛擬資源管理平臺是在ovirt4.0的基礎上開發的,從原有的一個admin用戶擴展成三個管理員用戶和普通用戶,下面簡單分析一下其實現權限管理的原理。sql
主要包括三張表:roles(角色表)、roles_group(角色與操做組關係表)、permissions(權限表)
角色RoleType有五種:SystemAdmin、SecurityAdmin、AuditAdmin、UserRole、QuotaConsumer數據庫
經過VdcActionType進行操做自定義,經過枚舉設置操做與操做組的從屬關係,而ActionGroup是定義操做組(或者說動做組)
好比瘦客thinClient做爲一個操做組,則其包括好多種操做,好比登陸VdcLogin和退出VdcLogout等等spa
// VdcLogin VdcLogin(5003, ActionGroup.THINCLIENT, QuotaDependency.NONE), VdcLogout(5004, ActionGroup.THINCLIENT, QuotaDependency.NONE),
permissionList權限列表中,包含權限對象PermissionSubject,權限對象的屬性以下:code
知足權限的條件判斷(1,2必須知足,3,4,5知足其中一個)對象
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操做添加權限
經過RemovePermissionCommand的paramPermission操做刪除權限,根據權限ID刪除
getDbFacade().getPermissionDao().remove(perms.getId());ip