freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內容

[計算機]基于角色的訪問控制rbac資料-文庫吧

2025-01-03 12:53 本頁面


【正文】 ..{ get ...{ return m_next。 } } //同步處理消息 public IMessage SyncProcessMessage(IMessage msg) ...{ Preprocess(msg)。 IMessage returnMethod = (msg)。 return returnMethod。 } //異步處理消息(不實現) public IMessageCtrl AsyncProcessMessage(IMessage msg, IMessageSink replySink) ...{ throw new InvalidOperationException()。 } endregion 自定義的 AOP 方法region 自定義的 AOP 方法 private void Preprocess(IMessage msg) ...{ //只處理方法調用 if (!(msg is IMethodMessage)) return。 //獲取方法中定義的 Task 屬性,交給權限檢查類去檢查 IMethodMessage call = msg as IMethodMessage。 MethodBase mb = 。 object[] attrObj = (typeof(Task), false)。 if (attrObj != null) ...{ Task attr = (Task)attrObj[0]。 if(!()) ()。 } // Type type = ()。 } endregion } public class PermissionCheckProperty : IContextProperty, IContributeObjectSink ...{ IContributeObjectSink 實現,將 AOP 類加入消息處理鏈region IContributeObjectSink 實現,將 AOP 類加入消息處理鏈 public IMessageSink GetObjectSink(MarshalByRefObject o, IMessageSink next) ...{ return new SecurityAspect(next)。 } endregion IContextProperty 實現region IContextProperty 實現 public string Name ...{ get ...{ return PermissionCheckProperty。 } } public void Freeze(Context newContext) ...{ } public bool IsNewContextOK(Context newCtx) ...{ return true。 } endregion } //特性定義,用于 Consumer [AttributeUsage()] public class PermissionCheckAttribute : ContextAttribute ...{ public PermissionCheckAttribute() : base(PermissionCheck) ...{ } public override void GetPropertiesForNewContext(IConstructionCallMessage ccm) ...{ (new PermissionCheckProperty())。 } }}?3. 定義用于權限檢查的兩個類:AzMan、AzHelper這兩個類的功能是從 XML 配置文件中讀入 Role 和 Task 的映射關系,以確定 Role 中是否包含 Task 的引用,從而確定當前 Role 是否具有對此 Task 的權限。注:這里可根據項目的實際情況,如果你的 Role 和 Task 的映射關系是存放在 Windows 的授權管理器(Authorizatiom Manager)或數據庫中,你可以使用自已的方法來替換下列類。在本例中,我的 Role 和 Task 的關系是存放在 XML 文件中,XML文件的格式如下所示:?xml version= encoding=utf8?ACL Tasks Task Name=AddItem Description=增加 / Task Name=ModifyItem Description=修改 / Task Name=RemoveItem Description=刪除 / Task Name=ListItem Description=獲取列表 / /Tasks Roles Role Name=Manager Task Name=AddItem / Task Name=ModifyItem / Task Name=RemoveItem / Task Name=ListItem / /Role /Roles/ACL 完成角色/任務映射關系的檢查using System。using 。using 。using 。namespace ...{ public class AzMan ...{ public static bool AccessCheck(string taskName, string[] roles, XmlDocument aclDoc) ...{ XmlNode rootNode = 。 XmlNodeList roleNodes,taskNodes。 bool IsPermissiable = false。 for (int i = 0。 i 。 i++) ...{ roleNodes = (Roles/Role[@Name=39。 + roles[i] + 39。])。 if (roleNodes != null) ...{ taskNodes = (0).SelectNodes(Task[@Name=39。 + taskName + 39。])。 if ( != 0) ...{ IsPermissiable = true。 break。 } } } return IsPermissiable。 } }} 助手類,協(xié)助其他類,更好地調用 AzMan 類的方法,以及基于性能考慮,對RoleTask的XML配置文件進行緩存:using System。using 。using 。using 。using 。using 。using 。using 。using 。namespace ...{ public class AzHelper ...{ /**//// /// 檢查當前用戶是否具有執(zhí)行當前任務的權限,如果有權限,則不做任何處理 /// 如果不具有權限,則引發(fā)異常 /// public static void PermissionCheck(string taskName) ...{ if ( != null) ...{ XmlDocument aclDoc = (XmlDocument)[ACLDoc]。 if (aclDoc == null) ...{ CacheXml()。 aclDoc = (XmlDocument)[ACLDoc]。 } string[] roles = ()。 if (!(taskName, roles, aclDoc)) throw new UnauthorizedAccessException(訪問被拒絕,當前用戶不具有操作此功能的權限!)。 } } /**//// /// 檢查當前用戶是否具有執(zhí)行指定任務的權限 /// /// 任務名稱 /// True/False 是否允許執(zhí)行 public static bool IsPermissible(string taskName) ...{ if ( != null) ...{ XmlDocument aclDoc = (XmlDocument)[ACLDoc]。 if (aclDoc == null) ...{ CacheXml()。 aclDoc = (XmlDocument)[ACLDoc]。 } string[] roles = ()。 ((~/App_Data/))。 return (taskName, roles, aclDoc)。 } else return true。 } /**//// /// 緩存 XML 文件 /// private static void CacheXml() ...{ string fileName = (~/App_Data/)。 XmlDocument aclDoc = new XmlDocument()。 (fileName)。 (ACLDoc, aclDoc, new CacheDependency(fileName))。 } }}4. 業(yè)務邏輯類的實現由于大多數工作都在 AOP 中實現了,所以業(yè)務邏輯類的實現較為簡單,主要分為以下幾個步驟: 在類的層次定義要求 AOP 方式權限檢查的 Attribute: [PermissionCheck()] 使類繼承自 ContextBoundObject 對象 在方法層次上利用 Task Attribute 來定義其對應的操作(注:多個方法可以定義為同一個 Task) 例如:namespace BusinessLogic...{ [PermissionCheck()] public class ItemManager : ContextBoundObject ...{ [Task(AddItem,增加)] public void AddItem(Item item) ...{ //... } }}這樣就可以了,CLR 會在運行時檢查類的 PermissionCheck?Attribute,然后尋找方法上的 Task ,取出當前用戶對應的 Role ,再去進行匹配檢查,如果不能執(zhí)行此操作,會拋出 UnauthorizedAccessException 的異常,在外部進行處理即可(如在 中增加 ErrorPage 等)5. 其他相關功能的實現Q:如果我寫程序時,在各個業(yè)務邏輯類定義了大量的 Task ,如果統(tǒng)一提取出來?A:利用反射可取出程序集中定義的所有 Task ,代碼如下:Liststring dic = new Liststring()。StringBuilder sXml = new StringBuilder()。string curDir = ()。Assembly ass = (curDir + \\)。 foreach (Type t in ()) ...{ MethodInfo[] mis = ()。 foreach (MethodInfo mi in mis) ...{ object[] attrs = (false)。 if ( 0) ...{ foreach (object attr in attrs) ...{ if (().ToString().IndexOf(Task) = 0) ...{ Task ta = (Task)attr。 //檢查重復的 Task if (() 0) ...{ ()。 ((\r\n ,
點擊復制文檔內容
醫(yī)療健康相關推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1