權(quán)限驗(yàn)證包含認(rèn)證與授權(quán)兩部分,用戶(hù)登錄屬于認(rèn)證的問(wèn)題,驗(yàn)證當(dāng)前用戶(hù)是否具有指定功能的權(quán)限屬于授權(quán)的問(wèn)題, IBeamMDAA 已集成了這兩部分的功能,我們只需在適當(dāng)?shù)臅r(shí)候使用即可。
?????? 權(quán)限驗(yàn)證與業(yè)務(wù)對(duì)象緊密聯(lián)系,不能單獨(dú)談?wù)摚热纾寒a(chǎn)品信息的管理可能有:查詢(xún)、增加、編輯、刪除等功能,應(yīng)對(duì)當(dāng)前用戶(hù)是否有權(quán)限操作產(chǎn)品實(shí)例作出決斷,代碼如下:
btnAdd.Enabled = _ProductsCategory != null && !_ProductsCategory.IsNew && _ProductsList != null && Products .CanAdd();
btnDelete.Enabled = _Products != null && _Products.CanDelete();
nameDataGridViewTextBoxColumn.ReadOnly = _Products == null || !_Products.CanEdit();
?
另外,添加、編輯、查詢(xún) 這三種操作對(duì)于權(quán)限驗(yàn)證其實(shí)是一種權(quán)限,原因?yàn)椋河刑砑? 產(chǎn)品的權(quán)限,按邏輯推理應(yīng)該具有 編輯 產(chǎn)品的權(quán)限,而要編輯某一產(chǎn)品之前,首先要通過(guò)查詢(xún)后找到產(chǎn)品才能編輯,查詢(xún)是編輯的必要條件,因此,歸為一種功能權(quán)限,刪除同編輯同理,首先也必須先查詢(xún)到對(duì)象,因此在實(shí)際的系統(tǒng)設(shè)計(jì)中,不對(duì)查詢(xún)做特別的功能定義,道理就是這樣。
?????? 在設(shè)計(jì)并注冊(cè)功能時(shí)應(yīng)結(jié)合業(yè)務(wù)邏輯的實(shí)際需要設(shè)置,不是教條的設(shè)置:查詢(xún)、添加、編輯、刪除、擴(kuò)展 1 、擴(kuò)展 2 、擴(kuò)展 3 等,這種做法在 IBeamMDAA 中是嚴(yán)格禁止的。
?
下面我們看一看產(chǎn)品的這些方法的定義:
public static bool CanAdd()
?? {
????? return Csla. ApplicationContext .User.IsAllowed( ACPLID .FunAddProducts);
?? }
public bool CanEdit()
??? {
??????? if ( this .IsNew || this .IsDirty)
??????? { // 與業(yè)務(wù)對(duì)象當(dāng)前狀態(tài)相關(guān)的判斷,當(dāng)前對(duì)象正被用戶(hù)修改
?????????? return true ;
??????? }
??????? if (HasOrderItem || HasInventoryItem || HasPickListItem || HasInventoryCheckItem)
??????? { // 與業(yè)務(wù)邏輯相關(guān)的判斷
?????????? return false ;
??????? }
??????? return Csla. ApplicationContext .User.IsAllowed( ACPLID .FunAddProducts);
??? }
public bool CanDelete()
?? ?{
?????? if ( this .IsNew)
?????? { // 與業(yè)務(wù)對(duì)象當(dāng)前狀態(tài)相關(guān)的判斷
????????? return true ;
?????? }
?????? if (HasOrderItem || HasPickListItem || HasInventoryItem || HasInventoryCheckItem)
?????? { // 與業(yè)務(wù)邏輯相關(guān)的判斷
????????? return false ;
?????? }
?????? if (!Csla. ApplicationContext .User.IsAllowed( ACPLID .FunDeleteProducts))
?????? {
????????? return false ;
?????? }
????????????? // 在服務(wù)器上判斷,為提高性能、減少服務(wù)器調(diào)用往返將這部分代碼注釋
?????? //CanDeleteCommand result = DataPortal.Execute<CanDeleteCommand>(new CanDeleteCommand(this));
?????? //return result.Success;
?????? return true ;
??? }
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
