為了實現資料許可權的控制,我們需要在通用的許可權系統裡面儲存好對應角色具有哪些組織機構的資料許可權,然後在應用系統中呼叫api進行過濾資料處理即可。
為了實現以上的功能需求,我們需要在許可權系統裡面,角色控制**增加乙個資料許可權的資料儲存。
實際的應用系統,當使用者登陸成功後,我們獲取並記錄好其可以管理的公司或者部門,如果是主管的角色,可能有多個公司的資料可以管理,那麼可以在程式的頂部,讓使用者選擇管理那個公司的資料即可,如果切換公司,那麼重新整理現有的介面資料顯示就可以了。
在使用者成功登陸後,我們可以記錄使用者的相關許可權控制資訊,如他所能控制資料的公司或者部門,把它記錄下來。
portal.gc.companylist = bllfactory.instance.getbelongcompanysbyuser(info.id);然後儲存使用者預設的公司id,並根據使用者是否為管理員(超級管理員、公司管理員),然後構造乙個通用的過濾條件,放到全域性快取裡面,方便各個模組使用,如下**所示。list
deptlist = bllfactory.instance.getbelongdeptsbyuser(info.id);
portal.gc.deptlist = deptlist;
//在主介面的時候,我們可以根據使用者所能管理的公司資料,在頂部初始化公司列表,方便切換選擇,以下是初始化的**。設定選定的公司id(預設為使用者所在公司的id)
cache.instance["
selectedcompanyid
"] =info.company_id;
//設定過濾條件給介面基類使用
string filtercondition = string.format("
company_id = ''
", info.company_id);
if (!portal.gc.isadmin)
)", string.join(","
, deptlist));
}else' "
, info.id);}}
cache.instance[
"datafiltercondition
"] = filtercondition;
//如果多於乙個公司,那麼正常的需求是可以切換公司來檢視其它公司的資料的,要實現這個功能,那麼就需要修改登陸的那個全域性的過濾條件:cache.instance["datafiltercondition"]了。新增受管理的公司機構
//判斷如果使用者管理的公司資料多於乙個,那麼就顯示選擇單位列表,並繫結公司資料
if (portal.gc.companylist.count > 1
)
}//多於乙個顯示公司下拉列表
this.barcompanyitem.visibility =devexpress.xtrabars.baritemvisibility.always;
}else
我們來看看**的實現,其主要的邏輯就是獲取使用者選擇的公司id,然後根據公司、部門資訊,重新構建乙個全域性的過濾條件,並重新快取到對應的鍵值裡面去,供後面的窗體實現資料的過濾更新。
clistitem item = this.barcompanyitem.editvalue as如果需要對已有的窗體實現資料更新,那麼遍歷窗體,並統一實現資料重新整理即可。clistitem;
if (item != null
) '
", item.value);
if (!portal.gc.isadmin)
)", string.join(","
, portal.gc.deptlist));
}else' "
, portal.gc.userinfo.id);}}
cache.instance[
"datafiltercondition
"] = filtercondition;
//從上面的步驟**,我們可以看到如何構建乙個全域性的過濾條件,但是我們獲取資料的時候,如何才能實現資料許可權的控制,讓使用者所能看到的資料在可控的範圍內呢?遍歷全部視窗,更新
foreach (whc.framework.baseui.basedock form in
this
.mdichildren)
string message = string.format("
您已經切換資料顯示:
", item.text);
messagedxutil.showtips(message);
我們知道,一般窗體資料列表的繫結操作類似如下**所示
///所以主要的資料控制,就在函式getconditionsql()裡面了,那麼這個裡面,我們如何整合前面的過濾條件呢?///繫結列表資料
/// private
void
binddata()
下面是乙個案例**。
///我們主要關注下上面紅色部分即可,因為我們已經加上了標準的過濾條件了,這樣我們就可以看到自己管理的資料了。///根據查詢條件構造查詢語句
///
private
string
getconditionsql()
condition.addcondition(
"deleted
", 0, sqloperator.equal);//
不顯示刪除的
}
string
where = condition.buildconditionsql().replace("
where
", ""
);
//如果是單擊節點得到的條件,則使用樹列表的,否則使用查詢條件的
if (!string
.isnullorempty(treeconditionsql))
//
資料許可權的過濾:過濾規則,如果指定公司,以公司過濾,如果進一步指定部門,以公司+部門進行過濾;否則以個人的資料展示
//如果過濾條件不為空,那麼需要進行過濾
if (!string.isnullorempty(this.datafiltercondition))
", this.datafiltercondition);
}return
where
; }
為了實現統一的資料控制,我們要求整個業務表的設計,需要引入下面幾個標準的字段,這樣就能很好使用過濾條件進行資料的過濾了。
前面也介紹到了,窗體可以統一重新整理,其奧秘就是它們遵循統一的乙個資料載入介面,我們初始化窗體資料的函式**如下所示。
///所以它們就能夠統一呼叫formonload來統一重新整理資料,就是這個道理。///編寫初始化窗體的實現,可以用於重新整理
/// public override void
formonload()
//遍歷全部視窗,更新
如何在應用系統中實現資料許可權的控制功能
在很多應用行業裡面,都對資料的許可權做了特別的宣告,如對於銷售,財務的資料,它們是非常敏感的,因此要求對資料許可權進行控制,對於基於集團性的應用系統而言,就更多需要控制好各自公司的資料了。如預設只能看本公司 或者本部門的資料,對於特殊的領導,可能需要跨部門的資料,因此不能硬編碼那個領導該訪問哪些資料...
如何在應用系統中實現資料許可權的控制功能
在很多應用行業裡面,都對資料的許可權做了特別的宣告,如對於銷售,財務的資料,它們是非常敏感的,因此要求對資料許可權進行控制,對於基於集團性的應用系統而言,就更多需要控制好各自公司的資料了。如預設只能看本公司 或者本部門的資料,對於特殊的領導,可能需要跨部門的資料,因此不能硬編碼那個領導該訪問哪些資料...
如何在應用系統中實現資料許可權的控制功能 2
為了實現資料許可權的控制,我們需要在通用的許可權系統裡面儲存好對應角色具有哪些組織機構的資料許可權,然後在應用系統中呼叫api進行過濾資料處理即可。為了實現以上的功能需求,我們需要在許可權系統裡面,角色控制 增加乙個資料許可權的資料儲存。實際的應用系統,當使用者登陸成功後,我們獲取並記錄好其可以管理...