在很多應用行業裡面,都對資料的許可權做了特別的宣告,如對於銷售,財務的資料,它們是非常敏感的,因此要求對資料許可權進行控制,對於基於集團性的應用系統而言,就更多需要控制好各自公司的資料了。如預設只能看本公司、或者本部門的資料,對於特殊的領導,可能需要跨部門的資料,因此不能硬編碼那個領導該訪問哪些資料,需要進行後台的許可權和資料許可權的控制為佳,本文主要針對這個特點,對這個資料許可權的功能模組進行**,並以我的winform開發框架的實際案例進行剖析,介紹實際專案中對資料許可權的控制管理。
剛才說到,對資料進行控制最好通過彈性的方式,在乙個系統裡面或者功能模組裡面對使用者角色或者崗位進行設定,一般許可權控制預設在乙個許可權管理系統模組進行設定,資料許可權也應該如此。
許可權系統除了可以對使用者能操作那些功能進行限定,也還可以對其訪問那些組織機構的資料進行限定,我們通過許可權系統,把這些許可權控制的資料進行儲存,在應用系統模組裡面進行整合即可,根據角色擁有的資料許可權,授予使用者對其他部門或者機構的資料進行訪問。如下面是我許可權系統模組裡面對角色許可權的設定操作。
1)對角色功能許可權進行設定
2)對角色資料許可權進行控制
當對角色的資料許可權進行儲存後,我們就可以把這個角色能夠訪問的組織機構(公司、部門、工作組等等)進行記錄起來了。
1)在應用程式中,通過在程式頭部,讓可以管理多個醫院機構的使用者選擇管理的資料訪問,即可實現不同的資料區分管理。
2)當使用者在上面切換不同的機構,所有存在的介面資料全部實現重新整理,如開啟了很多介面,那麼這些介面的資料也隨之更新為對應新的機構下的資料。
了解了上面大致的需求,我們應該如何通過整合許可權管理系統實現在應用系統的資料許可權控制和整合呢?
首先我們需要在使用者登陸的時候,獲取對應使用者的資料許可權內容,然後把它轉化為我們需要的資訊,如下**所示。
//其中calle***ctory方式呼叫,是以wcf的方式獲取對應的資料庫資料。在上面**裡面,有乙個roledatainfo的實體類,這個就是用來承載使用者角色的資料許可權資料,其中包括了判斷如果使用者管理的公司資料多於兩個,那麼就顯示選擇單位列表,並繫結公司資料
listroledatalist = calle***ctory.instance.findbyuser(info.id);
list
companylist = new list();
foreach (roledatainfo roledatainfo in
roledatalist)}}
}}portal.gc.companylist =companylist;
//設定選定的公司id
cache.instance["
selectedcompanyid
"] =info.company_id;
//設定過濾條件給介面基類使用
cache.instance["
datafiltercondition
"] = string.format("
(company_id is null or company_id = '')
", info.company_id);
belongcompanys(所屬公司)和 belongdepts(所屬部門 )的屬性,我們把它解析為我需要的資料listcompanylist 、 selectedcompanyid 和 datafiltercondition,當然如果有部門的控制,可以做的更多,我這裡僅僅以醫院機構進行區分即可。
selectedcompanyid 就是使用者選擇檢視的組織機構id,datafiltercondition就是用來構建乙個資料過濾指令碼,對使用者看到的資料進行乙個過濾篩選作用。我們把這兩個資料內容,放到winform的快取裡面,如果是web可以用session代替,這樣可以在多個模組或者介面中方便訪問使用。
為了實現使用者選擇不同的機構,所有開啟的窗體資料實現相應的更新,那麼我們需要處理公司選擇的操作,具體實現**如下所示。
private上面是對所有開啟的窗體,傳遞了對應的資訊,然後進行了重新整理。那麼我們在看看窗體本身內部的資料顯示邏輯是如何的。void txtcompany_editvaluechanged(object
sender, eventargs e)
'", item.value);
cache.instance[
"datafiltercondition
"] =condition;
//遍歷全部視窗,更新
foreach (whc.framework.baseui.basedock form in
this
.mdichildren)
string message = string.format("
您已經切換資料顯示:
", item.text);
messagedxutil.showtips(message);
}}
}
我們以病人資料的查詢介面為例,根據不同的輸入條件,對資料進行不同查詢外,還增加了乙個對組織機構過濾的條件,如下所示。
///以上繫結**實現了:分頁、條件查詢、高階查詢、字段列表顯示、中文名稱轉義,以及最重要的,根據公司條件進行資料過濾的操作,從而讓使用者只能管理自己的資料。///根據查詢條件構造查詢語句
///
private
string
getconditionsql()
...................
}
string
where = condition.buildconditionsql().replace("
where
", ""
);
//如果公司過濾條件不為空,那麼需要進行過濾
if (!string.isnullorempty(this.datafiltercondition))
", this.datafiltercondition);
}return
where
; }
//////
繫結列表資料
/// private
void
binddata()
**:以上就是結合許可權管理系統模組,在應用系統中實現功能許可權控制和資料許可權的控制的操作例子和**展示,希望對大家有幫助。
如何在應用系統中實現資料許可權的控制功能
在很多應用行業裡面,都對資料的許可權做了特別的宣告,如對於銷售,財務的資料,它們是非常敏感的,因此要求對資料許可權進行控制,對於基於集團性的應用系統而言,就更多需要控制好各自公司的資料了。如預設只能看本公司 或者本部門的資料,對於特殊的領導,可能需要跨部門的資料,因此不能硬編碼那個領導該訪問哪些資料...
如何在應用系統中實現資料許可權的控制功能 2
為了實現資料許可權的控制,我們需要在通用的許可權系統裡面儲存好對應角色具有哪些組織機構的資料許可權,然後在應用系統中呼叫api進行過濾資料處理即可。為了實現以上的功能需求,我們需要在許可權系統裡面,角色控制 增加乙個資料許可權的資料儲存。實際的應用系統,當使用者登陸成功後,我們獲取並記錄好其可以管理...
如何在應用系統中實現資料許可權的控制功能 2
為了實現資料許可權的控制,我們需要在通用的許可權系統裡面儲存好對應角色具有哪些組織機構的資料許可權,然後在應用系統中呼叫api進行過濾資料處理即可。為了實現以上的功能需求,我們需要在許可權系統裡面,角色控制 增加乙個資料許可權的資料儲存。實際的應用系統,當使用者登陸成功後,我們獲取並記錄好其可以管理...