免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
博客園 - zhuweisky - 將權(quán)限引入系統(tǒng)的探索
    很久以前就嘗試過使用AOP進(jìn)行權(quán)限控制的管理,那時候只是試試而已,并沒有在項(xiàng)目中應(yīng)用過,最近跟的一個B/S項(xiàng)目中要求我們把權(quán)限管理加進(jìn)去,于是我考慮以前的AOP方法是否真的可行。思考許久后的結(jié)果是,可行,但是太麻煩。
    主要原因在于需要在UI層<=>邏輯層<=>數(shù)據(jù)層之外增加額外的一層來使得AOP攔截可以以恰當(dāng)?shù)牧6?、恰?dāng)?shù)臅r機(jī)切入。如果不增加額外的這一層而使用AOP就可能會得到這樣的結(jié)果--比如,在業(yè)務(wù)邏輯層或數(shù)據(jù)層使用AOP切入,就有可能出現(xiàn)這樣的情形,用戶花了老大的勁將要錄入的信息敲入了,最后當(dāng)點(diǎn)擊“提交”時,系統(tǒng)卻提示說“你沒有權(quán)限進(jìn)行添加操作!”。如果你是這個用戶,你一定會郁悶得吐血!
    所以,如果系統(tǒng)不允許用戶添加,則根本就不應(yīng)該讓添加的Page或Form出現(xiàn)在用戶眼前,然而,這在邏輯層或數(shù)據(jù)層是無法獲取這個信息的,只有UI層知道這是發(fā)生在什么時刻。但是,在UI層使用AOP截獲,你看見過么?我沒有,我相信那不是一件容易做的工作。

    于是,我開始尋找AOP之外的方法,終于,我找到了一個自己還比較滿意的解決方案。下面我們以B/S系統(tǒng)為例,來詳細(xì)描述這個方案,如果是C/S系統(tǒng),可以類推之。
    為了構(gòu)建一個在不同B/S系統(tǒng)中可以復(fù)用的解決方案,我們需要規(guī)范化(定義)一些基礎(chǔ)設(shè)施或元素。首先,我們需要定義權(quán)限的類別,比如最常見的有瀏覽、添加、修改、刪除。你也許已經(jīng)想到使用一個枚舉就可以了。但是,不能使用枚舉,因?yàn)槊杜e是sealed,不能被繼承,這就意味著權(quán)限類別將不能被自定義擴(kuò)展,所以,我沒有使用enum,而是使用class。
    /// <summary>
    
/// 應(yīng)用可以擴(kuò)展PermissionType,以增加其它權(quán)限類別,比如審核等
    
/// 自定義類別取值應(yīng)大于 5 
    
/// </summary
    public class PermissionType
    {
        
public const int Browse = 1 ; 
        
public const int Add    = 2 ;
        
public const int Update = 3 ;
        
public const int Delete = 4 ;
    }
     這樣,如果具體應(yīng)用中有更多的權(quán)限類別,只要從PermissionType繼承即可。比如,應(yīng)用中需要添加“審核”、“消審”的權(quán)限,則可以
    public class MGPPermissionType : PermissionType
    {
        
public const int Audit = 10 ;       //審核
        public const int CancelAudit = 11 ; //消審
    }
 
    一個用戶所擁有的權(quán)限可以使用IPermission接庫進(jìn)行規(guī)范:
    /// <summary>
    
/// 應(yīng)用可以擴(kuò)展IPermission,以增加其它權(quán)限類別,比如審核等
    
/// </summary>
    public interface IPermission
    {
        
bool CanBrowse{get ;} 
        
bool CanAdd{get ;}
        
bool CanUpdate{get ;} 
        
bool CanDelete{get ;}
    }
    如果應(yīng)用需要增加別的權(quán)限,也可以在實(shí)現(xiàn)這個接口的類中進(jìn)行擴(kuò)展,比如

    #region GeneralPermission
    
public class GeneralPermission :IPermission
    {
        
public bool HasNonePermit
        {
            
get
            {
                
return ! (CanBrowse || CanAdd || CanUpdate || CanDelete || CanAudit || CanCancelAudit) ;
            }
        }

        
#region IPermission 成員
        
#region CanBrowse
        
private bool canBrowse = false ; 
        
public bool CanBrowse
        {
            
get
            {
                
return this.canBrowse ;
            }
            
set
            {
                
this.canBrowse = value ;
            }
        }
        
#endregion
        
        
#region CanAdd
        
private bool canAdd = false ; 
        
public bool CanAdd
        {
            
get
            {
                
return this.canAdd ;
            }
            
set
            {
                
this.canAdd = value ;
            }
        }
        
#endregion
        
        
#region CanUpdate
        
private bool canUpdate = false ; 
        
public bool CanUpdate
        {
            
get
            {
                
return this.canUpdate ;
            }
            
set
            {
                
this.canUpdate = value ;
            }
        }
        
#endregion
        
        
#region CanDelete
        
private bool canDelete = false ; 
        
public bool CanDelete
        {
            
get
            {
                
return this.canDelete ;
            }
            
set
            {
                
this.canDelete = value ;
            }
        }
        
#endregion
        
        
#region CanAudit
        
private bool canAudit = false ; 
        
public bool CanAudit
        {
            
get
            {
                
return this.canAudit ;
            }
            
set
            {
                
this.canAudit = value ;
            }
        }
        
#endregion
        
        
#region CanCancelAudit
        
private bool
本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
一種簡單的直觀的高效的權(quán)限設(shè)計(jì)
一步一步Asp.Net MVC系列
java責(zé)任鏈模式及項(xiàng)目實(shí)際運(yùn)用
.NET Core微服務(wù) 權(quán)限系統(tǒng) 工作流(一)權(quán)限系統(tǒng)
架構(gòu)之路(八)從CurrentUser說起
關(guān)于C++類設(shè)計(jì)的兩種方式
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服