首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVC RoleProvider与授权属性

MVC RoleProvider与授权属性
EN

Stack Overflow用户
提问于 2011-01-12 00:39:18
回答 2查看 5.6K关注 0票数 8

我已经实现了自己的角色提供程序,而不是使用默认的角色提供程序。它的工作原理是,它可以判断某人何时应该或不应该能够查看页面。

但是,它能否做到以下几点:

  1. 如果用户未登录,则重定向到我的登录页
  2. ,如果用户已登录但没有正确的角色,则重定向到另一页

我还没有弄清楚如何使用Authorize属性来完成这个任务,我所拥有的只是:

代码语言:javascript
复制
[Authorize(Roles="Admin")]

基本上,我需要根据授权失败的哪个部分重定向到另一个页面。

我一直在寻找是否是web.config中的什么东西,但没有明显的跳出。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-12 01:20:14

VoodooChild回答了#1。

为#2 -

您可以做的是检查用户是否登录到登录页面,并显示不同的消息或完全不同的页面(甚至重定向到不同的操作)。

或者,您可以创建自己的授权属性。这将要求您在任何地方使用该属性,而不是默认的AuthorizeAttribute

代码语言:javascript
复制
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。因此,您还可以检查它是否包含某些内容,并且对用户进行了身份验证,很可能该用户没有查看该页面的权限。

票数 11
EN

Stack Overflow用户

发布于 2011-01-12 01:04:56

如果您正在使用FormsAuthentication回答您的第一个问题--是的,如果用户没有经过身份验证或登录,则可以将其重定向到页面上的日志:

确保您在web.config文件中有此内容(不确定您是否需要此文件之外的任何内容,请查看它。)

代码语言:javascript
复制
<authentication mode="Forms">
  <forms loginUrl="~/AccountController/LogOn" timeout="2880" />
</authentication>

若要回答您的第二个问题:“如果用户登录但没有正确的角色,请重定向到另一个页面”。

我们这样做的方式是,我们使用System.Web.Security.Roles.GetRolesForUser(username);方法来获取角色,并在此基础上在登录后将用户重定向到正确的视图。

希望这能有所帮助!

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4664302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档