首页 新闻 会员 周边

MVC 角色验证权限 自定义 求解

0
悬赏园豆:20 [已解决问题] 解决于 2010-12-30 09:44

自己写一个访问的权限  如果用户已经登陆 但是权限不够就 跳转到一个页面提示没有权限访问   但是 我写好之后只能跳转到登陆页面 
再有就是按照如下的代码 能跳转大页面 但是 即使是有权限的用户也跳转到这个页面 也就是说 无论什么情况都跳到这个页面  有权限的用户也不能继续的访问

求解决  在线等
using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Web;  
using System.Web.Mvc;
using System.Web.Security;
using MvcCompany.Models;

namespace AuthTest.Models
{
    public class MyAuthAttribute : AuthorizeAttribute
    {
        // 只需重载此方法,模拟自定义的角色授权机制  
        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            string currentRole = GetRole(httpContext.User.Identity.Name);
            if (Roles.Contains(currentRole))
           
                return true;
                return base.AuthorizeCore(httpContext); 
        }

        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            base.OnAuthorization(filterContext);
            if (filterContext.HttpContext != null)
            {
                RedirectResult redirect = new RedirectResult("/Account/MyAuth");
                filterContext.Result = redirect;
                return;
            }           
        }
   
        //返回用户对应的角色, 在实际中, 可以从SQL数据库中读取用户的角色信息  
        private string GetRole(string UserName)
        {
            switch (UserName)
            {
                case "aaaaaa": return "Admin";
                default: return "Fool";
            }
        }

    }

}

阿わたし浩的主页 阿わたし浩 | 初学一级 | 园豆:130
提问于:2010-12-29 15:38
< >
分享
最佳答案
2

不要重写 OnAuthorization。

应该重写 AuthorizeCore 和 HandleUnauthorizedRequest,参考如下:

public class MyAuthAttribute : AuthorizeAttribute
{
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
string currentRole = GetRole(httpContext.User.Identity.Name);
if (Roles.Contains(currentRole)) return true;
return base.AuthorizeCore(httpContext);
}

protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
filterContext.Result = new RedirectResult("/Account/MyAuth"); ;
}

private string GetRole(string UserName)
{
switch (UserName)
{
case "aaaaaa": return "Admin";
default: return "Fool";
}
}
}

 

收获园豆:20
鹤冲天 | 老鸟四级 |园豆:2379 | 2010-12-29 18:24
重写 HandleUnauthorizedRequest 用来处理未授权的访问。
鹤冲天 | 园豆:2379 (老鸟四级) | 2010-12-29 18:25
哦了 可以了 多谢多谢
阿わたし浩 | 园豆:130 (初学一级) | 2010-12-30 09:44
其他回答(1)
0

你单步断点调试啊。

你数据库是自己的?然后角色验证那一套东西是微软的?

顾晓北 | 园豆:10844 (专家六级) | 2010-12-29 16:05
数据库是自己的 角色验证 上面不是写了啊
支持(0) 反对(0) 阿わたし浩 | 园豆:130 (初学一级) | 2010-12-29 16:06
那你单步调试一下吧。
支持(0) 反对(0) 顾晓北 | 园豆:10844 (专家六级) | 2010-12-29 16:15
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册