Asp.net MVC自定义权限

本文介绍了一种在ASP.NET MVC框架中实现自定义权限的方法。通过继承AuthorizeAttribute类并覆盖AuthorizeCore方法,可以实现基于角色的访问控制。具体实现包括用户身份验证、角色分配及权限检查。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MVC框架的一个很重要的优势在于可拓展性很高。权限的管理在每一个Web应用程序中都非常重要,虽然微软提供了Membership的默认权限设置,但在更多的情况下,Membership默认的权限设置并不能满足我们实际的需要。

    下面本文将用一种简单的办法来自定义权限。

   在MVC框架中,属性常用来限定控制器(Controller)的访问。所以我们首先从AuthorizeAttribute类中继承一个自定义的权限类。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MvcApplication_AuthorizeAttribute.Models
{
    public class MyAuthAttribute : AuthorizeAttribute  
    {
        // 只需重载此方法,模拟自定义的角色授权机制  
        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            if (!httpContext.User.Identity.IsAuthenticated)//判断用户是否通过验证
                return false;
            string[] StrRoles = Roles.Split(',');//通过逗号来分割允许进入的用户角色
            if (string.IsNullOrWhiteSpace(Roles))//如果只要求用户登录,即可访问的话
                return true;
            bool isAccess = JudgeAuthorize(httpContext.User.Identity.Name, StrRoles);
            if (StrRoles.Length > 0 && isAccess) //先判断是否有设用户权限,如果没有不允许访问
                return false;

            return true;
        }
        /// <summary>
        /// 根据用户名判断用户是否有对应的权限
        /// </summary>
        /// <param name="UserName"></param>
        /// <param name="StrRoles"></param>
        /// <returns></returns>
        private bool JudgeAuthorize(string UserName, string[] StrRoles)
        {
            string UserAuth = GetRole(UserName);  //从数据库中读取用户的权限
            return StrRoles.Contains(UserAuth,    //将用户的权限跟权限列表中做比较
                             StringComparer.OrdinalIgnoreCase);  //忽略大小写
        }

   

        // 返回用户对应的角色, 在实际中, 可以从SQL数据库中读取用户的角色信息  
        private string GetRole(string name)
        {
            switch (name)
            {
                case "aaa": return "User";
                case "bbb": return "Admin";
                case "ccc": return "God";
                default: return "Fool";
            }
        }  
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值