利用 AOP 实现 .NET 上完整的基于角色的访问控制(RBAC)模型

本文探讨了在 .NET 平台上实现角色基础的访问控制(RBAC)的方法,介绍了 RBAC 模型的基本要素,并提供了一种使用面向方面编程(AOP)来简化权限检查的实现方案。

 

一. 背景

  1. .NET 平台上没有完整的 RBAC 机制,.NET 中的安全模型(代码访问安全性:CAS)只是实现到 Role 层次,没有细化到 Task 层次,ASP.NET 2.0 中的诸多安全机制,如 Membership、Web.Config 的安全配置,都只能针对 Role 进行设置,大家在利用这些安全机制,往往需要在程序/代码硬编码(HardCode)角色,这样就无法实现在运行期自定义角色的功能
  2. Windows 2000/2003 中自带的 Authorization Manager 虽然实现了较为完整的RBAC模型,但一般只适用于 Windows 用户,而且也需要手动去进行权限检查(调用 AccessCheck方法)
  3. 权限检查是一个通用操作,最好的实现方式就是面向方面的编程(AOP)

二、相关主题介绍

  1. RBAC模型的要素:三个实体:用户、角色、任务(或操作)(User、Role、Task),其稳定性逐渐增强,两个关系,User<->Role、Role<->Task,其中:
    • User 是日常管理运行时建立
    • Role 是部署/交付建立
    • Task 是开发时确定
    • User<->Role 是日常管理运行时建立
    • Role<->Task 是部署/交付时建立
  2. 一般来说,Task是固定的,是和应用程序紧密绑定的,即使对之进行硬编码,也没有关系
  3. User/Role 部分比较容易实现,例如ASP.NET 2.0中 Membership 的实现

三、具体实现

注:本文中实现 AOP 的思路主要来自于如下文章:Aspect Oriented Programming using .NET - AOP in C# (http://www.developerfusion.co.uk/show/5307/3/) ,这是我看到的、在.NET 上实现 AOP最简捷/方便的方法,它不便提供了原理介绍,也提供了 Visual Studio 2005 的 Sample Project ,其中有 Security Check 和 Logging 的 AOP 功能。它的优点在于,在实现 AOP 的同时,不需要再去建立接口(这是很多人的做法),直接在原有类上进行少量改动,即可实现完整的 AOP 功能。

1. 定义描述“Task”(任务)的 Attribute

using System;

namespace BusinessLogic.Security
...{
    /**//// 
    /// 用于定义系统中的操作
    /// 
     [AttributeUsage(AttributeTargets.All,AllowMultiple=false,Inherited=true)]
    public sealed class Task : Attribute
    ...{
        private string _name,_description;

        public string Name
        ...{
            get ...{ return _name; }
            set ...{ _name = value; }
         }

        public string Description
        ...{
          get ...{ return _description; }
          set ...{ _description = value; }
         }
         
        public Task(string name,string description)
        ...{
             _name = name;
             _description = description;
         }

        public Task()
        ...{
         }
     }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值