手机
当前位置:查字典教程网 >编程开发 >asp.net教程 >一个基于Asp.Net MVC的权限方案
一个基于Asp.Net MVC的权限方案
摘要:1.数据结构Mad_Popedom为权限表,Control记录控制器名,Action记录动作名。Mad_Role为角色表。2.权限控制的实现...

1.数据结构

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

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

Mad_Role为角色表。

2.权限控制的实现

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

复制代码 代码如下:

using System.Collections.Generic;

using System.Web.Mvc;

using Madnet.Model.MadAdmin;

using Madnet.BLL.MadAdmin;

namespace Madnet.Controllers.MadAdmin

{

public class SupportFilterAttribute : ActionFilterAttribute

{

private bool _IsLogin = true;

/// <summary>

/// 是否需要登录

/// </summary>

public bool IsLogin

{

set

{

_IsLogin = value;

}

get

{

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

{

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

}

return _IsLogin;

}

}

public override void OnActionExecuting(ActionExecutingContext filterContext)

{

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

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

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

{

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

filterContext.Result = new EmptyResult();

}

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

{

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

if (!user.is_super)

{

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

{

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

filterContext.Result = new EmptyResult();

}

}

}

}

/// <summary>

/// 获取当前用户所有有权限执行的动作

/// </summary>

/// <returns></returns>

public List<Atmodel> GetPopedom(Mad_User user)

{

List<Atmodel> ats = new List<Atmodel>();

List<Mad_Popedom> pops = Mad_PopedomBLL.GetPopedombyUser(user.user_id);

foreach (Mad_Popedom pop in pops)

{

ats.Add(new AtModel() { Controller_Name = pop.Control, Action_Name = pop.Action });

}

return ats;

}

}

}

解释一下,上面的代码就是在执行前,先获取登录用户可以运行的Controller-Action,然后和当前需要执行的Controller-Action比较,如存在,即通过,否则为没有权限执行。

3.为动作添加权限

为简单起见,对于Controller层我是独立出来一个类库的,好处是等会为角色添加权限的时候我们不需要手动输入,只要反射dll就可以了。

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

如图所示,凡需要权限控制的函数,只需要添加[SupportFilter]特性就可以了,当然这种方式只能控制到Action级。

4.为角色额添加权限

这个比较简单,只需要把角色和权限关联起来就可以了,这里我是用反射Controller层dll实现。

Web.config

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

Global.asax.cs

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

Madnet.Controllers.Test即为Controller层的dll

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

Test为Controller名,index为Action名,选择role2可以访问的Action,提交到数据库即可。此图表示role2拥有Test1Controller的访问权限,但是没有Test2Controller,Test3Controller的访问权限。

5.结束

上面4步即已完成基本的权限控制。可以在此基础上加上用户组,用户,菜单等管理,可实现”用户-角色-权限”的自由组合,一个简单的通用后台大概就是这样了。

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

【一个基于Asp.Net MVC的权限方案】相关文章:

ASP.NET技巧:access下的分页方案

Asp.net 无限级分类实例代码

c#生成缩略图不失真的方法

把某个asp.net 控件替换成自定义控件的方法

使用.NET存储XML数据的方法

较为全面的Asp.net提交验证方案分析 (上)

利用Asp.Net回调机制实现进度条

asp.net gridview多页时的批量删除

asp.net 设置GridView的选中行

asp.net 备份和恢复数据库的方法

精品推荐
分类导航