当前位置导航:炫浪网>>网络学院>>网页制作>>ASP.NET教程

一个基于Asp.Net MVC的权限方案

  最近这段时间博客园有几位同学在探讨通用的权限方案,偶闲来无事,也来凑凑热闹,下面简单说一下我的简单解决方案,基于AOP的。由于使用了Asp.Net MVC 开发,可能需要先对MVC有些了解,思路都是差不多的。

  1.数据结构

2009-06-15_221050

  Mad_Popedom为权限表,Control记录控制器名,Action记录动作名。

  Mad_Role为角色表。

  2.权限控制的实现

  此处使用比较简单AOP方式,用MVC的Filter实现,代码如下

  1 using System.Collections.Generic;

  2 using System.Web.Mvc;

  3 using Madnet.Model.MadAdmin;

  4 using Madnet.BLL.MadAdmin;

  5

  6 namespace Madnet.Controllers.MadAdmin

  7 {

  8     public class SupportFilterAttribute : ActionFilterAttribute

  9     {

  10         private bool _IsLogin = true;

  11         /// <summary>

  12         /// 是否需要登录

  13         /// </summary>

  14         public bool IsLogin

  15         {

  16             set

  17             {

  18                 _IsLogin = value;

  19             }

  20             get

  21             {

  22                 if (System.Configuration.ConfigurationManager.AppSettings["IsLogin"] != null)

  23                 {

  24                     bool.TryParse(System.Configuration.ConfigurationManager.AppSettings["IsLogin"].ToString(), out _IsLogin);

  25                 }

  26                 return _IsLogin;

  27             }

  28         }

  29         public override void OnActionExecuting(ActionExecutingContext filterContext)

  30         {

  31             string controllerName = (string)filterContext.RouteData.Values["controller"];

  32             string actionName = (string)filterContext.RouteData.Values["action"];

  33

  34             if (IsLogin && filterContext.HttpContext.Session["Login_User"] == null)

  35             {

  36                 filterContext.HttpContext.Response.Redirect(new UrlHelper(filterContext.RequestContext).Action("Login", "Default"));

  37                 filterContext.Result = new EmptyResult();

  38             }

  39             else if (IsLogin && filterContext.HttpContext.Session["Login_User"] != null)

  40             {

  41                 Mad_User user = filterContext.HttpContext.Session["Login_User"] as Mad_User;

  42                 if (!user.is_super)

  43                 {

  44                     if (!GetPopedom(user).Exists(p => p.Controller_Name == controllerName.ToLower() && p.Action_Name == actionName.ToLower()))

  45                     {

  46                         filterContext.HttpContext.Response.Write("没有权限");

  47                         filterContext.Result = new EmptyResult();

  48                     }

  49

  50                 }

  51             }

  52

  53         }

相关内容
赞助商链接