我正在使用Windows身份验证开发MVC内部网。
我有一个文件夹,其中包含只有某些角色才能看到的视图。
我在该文件夹中有一个web.config文件
<?xml version="1.0"?>
<configuration>
<system.web>
<authorization>
<allow roles="Administrator, ICCManager"/>
<deny users="*"/>
</authorization>
</system.web>
</configuration>
我想编写代码以查看用户是否处于其中一个角色,如果没有将其重定向到信息页面。
这是我的第一个MVC项目,我仍然不完全了解我的方式。所以我不知道在哪里编写这段代码。我知道,有点愚蠢,但我还没有得到它。
答案 0 :(得分:1)
您不必直接配置对视图的访问权限,您可以配置对操作方法的访问权限,然后返回视图。
您可以通过使用[Authorize]属性修饰单个操作方法或整个控制器来完成此操作:
// All actions in this class cannot be called by anonymous users
[Authorize]
public class MyController {
// This action is just callable by users in role Admin
[Authorize(Roles="Admin")]
public ActionResult MyAction() {
return View();
}
// This action is callable by any authorized user (inherited from class)
public ActionResult MyAction() {
return View();
}
}
// Actions from this controller can be called by any user (even unauthorized)
public calls AnotherController {
}
当非允许用户尝试访问某个页面时,该用户将被重定向到您在web.config中loginUrl
元素的authentication
属性中配置的操作:
<authentication mode="Forms">
<forms loginUrl="~/Membership/Login" ... />
</authentication>
答案 1 :(得分:0)
这可能是一个很好的起点:
http://theintegrity.co.uk/2010/11/asp-net-mvc-2-custom-membership-provider-tutorial-part-1/
您需要实现一个会员提供商,该提供商可以确定用户拥有的角色等。非常可定制。
答案 2 :(得分:0)
您将检查特定用户的数据库中的记录的代码将位于model
类中,您可以将结果从那里返回给控制器。
在controller
中,您可以处理逻辑,例如,如果用户未获得授权,则将其重定向到其他信息页以查找个人资料页等。
有关更多信息,请阅读一次,这将有助于清除有关ASP MVC的许多其他概念。
答案 3 :(得分:0)
在控制器方法上使用AuhtorizeAttribute将限制设置为操作,并在web.config中设置身份验证标记中的表单身份验证,并将登录页面设置为您需要的页面。如果它不是登录页面而只是信息,请打开global.asax并覆盖Application_AuthenticateRequest方法。
protected void Application_AuthenticateRequest(Object sender, EventArgs e)
{
if (User.Identity.IsAuthenticated)
{
//redirect
}
}