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

This entry was posted in 未分类. Bookmark the permalink.

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

  1. M says:

    好文章, 辛苦了

  2. moslem says:

    文章中的代码部分的字体较小,这好象是页面模板造成的,没法更改,大家可以把 IE 中将字体设置为“较大”,或者利用 IE7 的页面 Zoom Level 放大来浏览代码。

  3. dotAge says:

    TASK有没有category?
    否则业务稍一复杂,授权UI就很不友好了。

  4. 小新0574 says:

    写得不错,支持一下

    挑个小毛病:
    “它不便提供了原理介绍”

    =>它不仅提供了原理介绍

    对吧?:)

  5. moslem says:

    To: dotAge

    本文中对 Task 层次的实现较为简单,如果 Task 很多,确实在设置 Role<–>Task 的映射关系时比较麻烦。

    有两种做法:

    1) 将多个方法的 Task 指定为同一个

    如 AddItem, RemoveItem, ListItem 等方法上都设置同样的 Task("ItemManage","Item管理") ,这样能大量减少 Task 的数量,但也使得控制粒度变粗了。

    2) 按照 Authorization Manager 的做法(其中分为 Task 和 Operation,一个 Task 可以包含多个 Operation),在 Task 上层再加一层,例如你说的 Category,实现这个也不难,对上文中的相关代码进行更改就可以实现,这一部分不是固定的,是可以根据具体情况灵活定制的。

  6. 菌哥 says:

    请问LZ,有demo吗,能否提供下载,这样看起来更方便一些

  7. moslem says:

    To 小新0574 :

    谢谢你指出错误,但 FreeTextbox 修改一次,里面的代码就全乱了,所以暂时将错就错,请谅解 :)

  8. 深山老妖 says:

    有demo吗,能否提供下载,这样看起来更方便一些

  9. moslem says:

    以上代码是从项目文件提取出来的,所以没有 Demo ,如果你想使用的话,其实很简单:

    1) 新建 Web 项目
    2) 把上文中的 4 个类加入到项目中(Task.cs, SecurityAspect.cs, AzHelper.cs, AzMan.cs)
    3) 按照上文中的 ItemManager 类的方式式来建立一个业务逻辑类
    4) 把上文中的 XML 文件加入到 App_Data 目录下
    5) 新加一个页面,调用你的 ItemManager 类即可

  10. sharpedge says:

    仅仅是一个RBAC0的实现,且不说操作的层级和关联,还缺少资源约束等必要的东西,我们的做法是建立一个统一的权限管理系统,公司的所有应用都从一个地方获取,角色和操作可以在权限系统中编辑和定义,业务系统可以提供自己的资源组服务,从而实现权限系统和业务系统权限的无缝整合

  11. Kevin says:

    这样做在性能上的损失如何?

  12. iads says:

    企业内部,我还是喜欢AzMan ^^
    internet上的企业应用,有点让人崩溃的想法

  13. lckboy says:

    如果是静态方法,又该如何处理?

  14. 雨寒 says:

    2.0中不是提供了membership框架么?基本的角色权限访问都可以了,再稍微配合一下自定义的控制方法就可以吧。。。

  15. benny says:

    继承自CBO的对象,调用时会跨Context,会有性能损耗

  16. Hill says:

    有代码下载那就好啊

  17. skyey says:

    文章在ie6中,opera9,ff中都不能很好的现实….看起来不舒服,要结合多个浏览器…晕倒…

  18. sexycoolwolf says:

    收益匪浅
    但是由于功力尚浅,看得不甚了了,强烈希望有个Demo下载,或者您发一份给我,谢谢
    sexycoolwolf(at)gmail.com

  19. skyey says:

    作者没有对aop做个很好的规划和设计,这篇文章太正对性了.
    不过很感谢作者,学到了个新的用法"ASP.NET 2.0 中的表达式功能".

  20. 阿滨 says:

    强烈要求楼主提供一个示例!!!。真是好东西。。严重支持

  21. 阿滨 says:

    未启用角色管理器功能

  22. 阿滨 says:

    我运行提示这个错误

  23. 阿滨 says:

    未启用角色管理器功能

    我运行提示这个错误

  24. 阿滨 says:

    这里没有和用户名关系起来啊?
    如何指定哪个用户有哪个权限啊??

  25. Matt says:

    你好, 我也根据你的设计写了类似的继承expression builder的自定义类型,但我发现在编译后代码第一次运行的时候(还没有进入登陆界面接收到用户登陆ID信息), CLR就已经开始加载自定义的expression builder来解释含有<%# %>的页面, 以后就不再解释该页面了,这样的话我的权限验证只能拿到TASK的信息而拿不到USER的信息,不能进行验证.请问这是什么原因?

  26. Matt says:

    问题已经解决.

  27. Matt says:

    问题已经解决. 把相关ASPX设为非编辑页面就行了.

  28. 阿滨 says:

    楼住能不能提供一个完整的DEMO啊。 。
    谢谢啊
    email:xtbsp@163.cm

  29. Todd says:

    问个小问题。这里的ItemManager是从ContextBoundObject继承的,可是如果我的某个类原来就需要从某个父类继承,就无法再继承ContextBoundObject了,那怎么办呢?

  30. zzmsl says:

    这里没有和用户名关系起来啊?
    如何指定哪个用户有哪个权限啊??

    我也碰到上述疑问,到底怎么用啊?

  31. 天行健 says:

    太好!终于找到了

    能不能,发个“源码”至

    非常感谢!

  32. 11 says:

    太好!终于找到了,能不能给个原代码看看
    发到
    谢谢!

  33. hghxb says:

    也给我发一份啊,学习中,好东西。谢谢了

  34. Henry Wu says:

    能不能给我发一份

  35. jumpan says:

    能不能给份学习一下啊,谢谢,

  36. 张辰 says:

    非常的厉害!!!!!

    佩服!希望能看到楼主关于权限更深入的文章。就算是一点点思路也好!

    读一篇可以少摸索10天了。

  37. greystar says:

    <asp:Button ID="Button1" runat="server" Enabled="<%$ PermissionCheck:AddItem %>" Text="<%$ PermissionCheck:AddItem %>"/>我使用这种方式进行绑定,同时设定断点,但是有时很不稳定,不进入断点,而且给的值是TRUE(其实我给的值是FALSE).

  38. 张泽 says:

    您是高手,请问能不能帮助做一个基于文档的RBAC模拟.付报酬! 联系方式:

  39. vs.net says:

    能不能,发个“源码”至

    非常感谢!

  40. public class ItemManager : ContextBoundObject
    这样局限性我觉得有点大啊,毕竟C#不允许多继承,如果想继承其它类的话,就有点麻烦了。

    另外不知道ASP.net中频繁的用ContextBoundObject的性能如何。

    博主可否把你的代码发给我研究下?

  41. 刘力文 says:

    老大,可否发份源码给我研究一下。谢谢。
    email: ldaqiang#gmail.com

  42. zealson says:

    老大,可否发份源码给我研究一下。谢谢。 email: