我已经实现了自己的角色提供程序,而不是使用默认的角色提供程序。它的工作原理是,它可以判断某人何时应该或不应该能够查看页面。
但是,它能否做到以下几点:
。
我还没有弄清楚如何使用Authorize属性来完成这个任务,我所拥有的只是:
[Authorize(Roles="Admin")]基本上,我需要根据授权失败的哪个部分重定向到另一个页面。
我一直在寻找是否是web.config中的什么东西,但没有明显的跳出。
发布于 2011-01-12 01:20:14
VoodooChild回答了#1。
为#2 -
您可以做的是检查用户是否登录到登录页面,并显示不同的消息或完全不同的页面(甚至重定向到不同的操作)。
或者,您可以创建自己的授权属性。这将要求您在任何地方使用该属性,而不是默认的AuthorizeAttribute。
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
if (filterContext.HttpContext.Request.IsAuthenticated)
{
filterContext.Result = new RedirectToRouteResult(
new RouteValueDictionary
{
{ "action", "ActionName" },
{ "controller", "ControllerName" }
});
}
else
base.HandleUnauthorizedRequest(filterContext);
}
}更新:
只是想到了另一种方法。当从另一个页面重定向到login页面时,也会传递一个查询字符串ReturnUrl。因此,您还可以检查它是否包含某些内容,并且对用户进行了身份验证,很可能该用户没有查看该页面的权限。
发布于 2011-01-12 01:04:56
如果您正在使用FormsAuthentication回答您的第一个问题--是的,如果用户没有经过身份验证或登录,则可以将其重定向到页面上的日志:
确保您在web.config文件中有此内容(不确定您是否需要此文件之外的任何内容,请查看它。)
<authentication mode="Forms">
<forms loginUrl="~/AccountController/LogOn" timeout="2880" />
</authentication>若要回答您的第二个问题:“如果用户登录但没有正确的角色,请重定向到另一个页面”。
我们这样做的方式是,我们使用System.Web.Security.Roles.GetRolesForUser(username);方法来获取角色,并在此基础上在登录后将用户重定向到正确的视图。
希望这能有所帮助!
https://stackoverflow.com/questions/4664302
复制相似问题