Security MVC3安全提示

Security MVC3安全提示,security,asp.net-mvc-3,Security,Asp.net Mvc 3,我正在使用AspNetSqlMembershipProvider并创建了用于设置的页面。现在我有了这项工作,我想知道如何最好地利用整个网站的安全性。对于控制器,我可以使用[授权],但下一步我要去哪里?我的意思是,我只是用Roles.IsUserInRole把视图弄得乱七八糟,还有什么地方需要检查呢。关于如何处理这一问题,有什么好的示例站点吗?没有,您不应该将视图与角色混在一起。IsUserInRole,检查角色不是视图的责任,这是一个控制器/授权过滤器作业,用于填充视图模型,以便在视图中您只有:

我正在使用AspNetSqlMembershipProvider并创建了用于设置的页面。现在我有了这项工作,我想知道如何最好地利用整个网站的安全性。对于控制器,我可以使用[授权],但下一步我要去哪里?我的意思是,我只是用Roles.IsUserInRole把视图弄得乱七八糟,还有什么地方需要检查呢。关于如何处理这一问题,有什么好的示例站点吗?

没有,您不应该将视图与
角色混在一起。IsUserInRole
,检查角色不是视图的责任,这是一个控制器/授权过滤器作业,用于填充视图模型,以便在视图中您只有:

@if (Model.ShouldDisplaySomeSection)
{
    ... // some section
} else {
   ... // not authorized
}
还请注意,如果您使用标准的
[Authorize]
属性装饰控制器操作,并且用户没有足够的角色,则可能永远不会执行此操作,并且视图也不会命中


就我个人而言,我认为即使它不限于MVC,它也是一个非常有用的安全检查表。

我创建了一个解决方案,其中我从
Authorize
属性派生,并在我自己的属性中引入了一个
param[]
数组,该数组包含一个名为
UserRoles
枚举类型,所以我跳过了神奇的弦

然后是杂乱无章的视图。嗯,我想你应该问问自己,当你准备在视图中编写
IsUserInRole
时,你是否真的应该在视图中编写它。我认为您应该尽可能保持视图干净,并尽可能在
ViewModel
中进行排序。如果你不能这么做,考虑一个HTML帮助器。