惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
The Exploit Database - CXSecurity.com
J
Java Code Geeks
H
Help Net Security
B
Blog RSS Feed
G
Google Developers Blog
博客园 - 司徒正美
MongoDB | Blog
MongoDB | Blog
量子位
博客园 - 三生石上(FineUI控件)
The Cloudflare Blog
P
Proofpoint News Feed
小众软件
小众软件
人人都是产品经理
人人都是产品经理
云风的 BLOG
云风的 BLOG
V
V2EX
月光博客
月光博客
C
Check Point Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
A
Arctic Wolf
Help Net Security
Help Net Security
Schneier on Security
Schneier on Security
D
DataBreaches.Net
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园_首页
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
P
Palo Alto Networks Blog
T
Tenable Blog
L
LangChain Blog
Attack and Defense Labs
Attack and Defense Labs
Google DeepMind News
Google DeepMind News
N
News and Events Feed by Topic
Forbes - Security
Forbes - Security
F
Fortinet All Blogs
Recent Announcements
Recent Announcements
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
大猫的无限游戏
大猫的无限游戏
www.infosecurity-magazine.com
www.infosecurity-magazine.com
Y
Y Combinator Blog
WordPress大学
WordPress大学
Stack Overflow Blog
Stack Overflow Blog
V
Visual Studio Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Engineering at Meta
Engineering at Meta
NISL@THU
NISL@THU
GbyAI
GbyAI
博客园 - Franky
S
Secure Thoughts
有赞技术团队
有赞技术团队
PCI Perspectives
PCI Perspectives
U
Unit 42

博客园 - 芈老头

MongoDB的快速手动安装 MongoDB.WebIDE:升级版的Mongodb管理工具 MVC过滤器使用案例:统一处理异常顺道精简代码 寻虫记:BOM头制造的冤案,无故多出空白行 jquery中attr和prop的区别 director.js:客户端的路由---简明中文教程 MVC利用Routing实现多域名绑定一个站点、二级域名以及二级域名注册Area 推荐百度地图的新功能--“三维” jQuery UI 应用不同Theme的办法 Asp.Net实现FORM认证的一些使用技巧 从《钢铁侠2》看软件测试的重要性 关于《asp.net下web控件点评》中的一些看法 【转】程序员的爱情 【转】SQL Server数据库开发的二十一条军规 VS.net2008正式版发布了 VS2005的关于母版页嵌套的一个小技巧 VSS又一次出错了,神出鬼没的 记住window.open的用法 - 芈老头 - 博客园 象WORD一样,双击.doc的文件就自动打开WORD并编辑该文件(转) - 芈老头 - 博客园
关于MVC权限控制的一点小想法
芈老头 · 2010-12-15 · via 博客园 - 芈老头

  近来一直在学习MVC。

  先检讨一下自己,本来一直在看WPF并向Silverlight靠拢的,可XAML这个东西一时半会领会不了它的真谛,所以暂时先放下了。虽然MVC看的比较系统,但暂时闲置了WPF和Silverlight还是有点沮丧感,觉得自己没有坚持。

  MVC的权限控制一直是一个麻烦事。

  Webform下的窗体身份验证及角色权限管理,我自己有一篇文章做了个总结:Asp.Net实现FORM认证的一些使用技巧

  对于MVC,我不喜欢它自带的Membership那一套,也不喜欢用Linq,所以我着重参考了这篇文章:ASP.NET MVC:窗体身份验证及角色权限管理示例。文章的内容很好,将FORM认证和MVC很好的结合起来,而且角色权限可控制到Action的级别。

  今天我在做自己写的一个简单示例程序时发现,如果当我们的权限管理比较粗狂时,比如,我只需要根据是否登录来判断页面是否需要访问时,如果还是为每一个Controller下的每一个Action都增加属性[Authorize],那就太麻烦了。我在想能不能控制到Controller级别呢?于是做了下面的尝试:

1 [Authorize]
2 public class AccountController : BaseController
3 {
4 } 

即将属性[Authorize]写到Controller级别,发现是可用。这样就控制了整个Controller都需要认证后才能访问。但是还是得为每一个Controller下都增加属性[Authorize],也有点麻烦。于是,我想到了Webform下常会做一个Pagebase类,我又做了下面的尝试:

1 [Authorize]
2 public class BaseController : Controller
3 {
4 }
5 
6 public class AccountController : BaseController
7 {
8 }

也就是建立一个BaseController基类,带上[Authorize]属性,然后需要认证的Controller都继承这个基类即可。测试通过,那就OK了。今天工作差不多就能到这了。

  但也有一些问题,比较普遍的就是在控制Action的角色权限时,需要写死[Authorize(Roles = "manager")]。很多人在问,能不能那个角色能动态的从数据库读取呢?其实我也没有办法。包括以前Webform认证时按角色控制目录的访问属性,也需要在Web.config中写死。

  不过,我有个想法,还没实践,那就是在BaseController中增加相应的虚Action或抽象Action,在这一级定义好[Authorize]属性,或者进行动态的读取,其余的Action重写实现就可以了。不知道可不可行。有时间试一下。

  今天暂时就这么多,记一下,给自己也是个提醒。