zoukankan      html  css  js  c++  java
  • Asp.net MVC自定义权限

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

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

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

     1 using System;
     2 using System.Collections.Generic;
     3 using System.Linq;
     4 using System.Web;
     5 using System.Web.Mvc;
     6 
     7 namespace MvcApplication_AuthorizeAttribute.Models
     8 {
     9     public class MyAuthAttribute : AuthorizeAttribute  
    10     {
    11         // 只需重载此方法,模拟自定义的角色授权机制  
    12         protected override bool AuthorizeCore(HttpContextBase httpContext)
    13         {
    14             if (!httpContext.User.Identity.IsAuthenticated)//判断用户是否通过验证
    15                 return false;
    16             string[] StrRoles = Roles.Split(',');//通过逗号来分割允许进入的用户角色
    17             if (string.IsNullOrWhiteSpace(Roles))//如果只要求用户登录,即可访问的话
    18                 return true;
    19             bool isAccess = JudgeAuthorize(httpContext.User.Identity.Name, StrRoles);
    20             if (StrRoles.Length > 0 && isAccess) //先判断是否有设用户权限,如果没有不允许访问
    21                 return false;
    22 
    23             return true;
    24         }
    25         /// <summary>
    26         /// 根据用户名判断用户是否有对应的权限
    27         /// </summary>
    28         /// <param name="UserName"></param>
    29         /// <param name="StrRoles"></param>
    30         /// <returns></returns>
    31         private bool JudgeAuthorize(string UserName, string[] StrRoles)
    32         {
    33             string UserAuth = GetRole(UserName);  //从数据库中读取用户的权限
    34             return StrRoles.Contains(UserAuth,    //将用户的权限跟权限列表中做比较
    35                              StringComparer.OrdinalIgnoreCase);  //忽略大小写
    36         }
    37 
    38    
    39 
    40         // 返回用户对应的角色, 在实际中, 可以从SQL数据库中读取用户的角色信息  
    41         private string GetRole(string name)
    42         {
    43             switch (name)
    44             {
    45                 case "aaa": return "User";
    46                 case "bbb": return "Admin";
    47                 case "ccc": return "God";
    48                 default: return "Fool";
    49             }
    50         }  
    51     }
    52 }

    以上的代码只是示例而已。你可以将实际的权限控制逻辑写在自定义的权限控制类(MyAuthAttribute)里面。如果在特定的业务过程中,用户没有访问权限,就返回false。然后我们要做的就是把这个类属性放在要控制的控制器(Controller)或者Action上面。代码如下所示。

    1      [MyAuth(Roles = "User")] 
    2         public ActionResult About()
    3         {
    4             return View();
    5         }


    这样,我们就完成了简单的自定义权限了。

    本文示例代码

    参考链接


    作者:kissazi2
    出处:http://www.cnblogs.com/kissazi2/
    本文版权归作者所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

  • 相关阅读:
    GoF23种设计模式之行为型模式之中介者模式
    GoF23种设计模式之行为型模式之备忘录模式
    GoF23种设计模式之行为型模式之解释器模式
    GoF23种设计模式之行为型模式之观察者模式
    GoF23种设计模式之行为型模式之状态模式
    GoF23种设计模式之行为型模式之策略模式
    GoF23种设计模式之行为型模式之模板方法
    GoF23种设计模式之行为型模式之访问者模式
    电子地图/卫星地图下载并转存为jpg图片
    webapi swagger学习笔记
  • 原文地址:https://www.cnblogs.com/kissazi2/p/2857992.html
Copyright © 2011-2022 走看看