检查用户是否具有运行操作的正确权限的最佳方法是什么?
我有几个想法,有些我比其他人更喜欢:
1)使用
PrincipalPermission
属性,该属性简单且在loc上写得很低。主要的缺点是它需要一个代码发布(和测试)来对安全性进行任何更改。
2)使用
Authorize
属性与
原则许可
属性。
3)使用自定义属性(如前所述
here
)从web.config文件中读取配置。这样做的好处是灵活,但我不喜欢在配置中读取需要生成的代码量。
4)使用自定义属性并从数据库中读取角色信息。类似于上一个选项,但来自数据库。我更倾向于走这条路线,因为它给了用户最大的灵活性,但它也要求我指定至少一个人来更改权限。当使用模拟时,这可能会变得困难/烦人,因为“管理员”在将来可能不存在。
5)使用web.config或db方法,而不是在属性级别,在基本控制器类中创建一个允许轻松检查角色的基本方法。这会在每个操作方法中产生额外的代码,而且除了避免
OnActionExecuted
方法(用于捕获目的)。
那么哪种选择是最好的呢?这里需要记住的是,至少在我的例子中,对代码进行更改需要进行测试,这可能是一个冗长而冗长的过程。在我看来,能够避免重新生成代码是一个很大的好处,尽管我认为即使在安全性发生变化的情况下,这样做也是有目的的。
(顺便说一句,我看到一个社区wiki按钮和一个关于主观性的警告,但我不确定是否应该检查这个或什么。)