好久没写过博客了,突然发现最后博客更新时间是2016年,感觉好长远

权限控制基本是所有cms系统或者进销存,或者几乎所有能和业务系统扯上关系的系统都要用上的一个模块,很多都想把这个模块独立出来,权限单独统一控制,所以就出现了aop及其他相关技术操作,当然我这里说aop只是说了aop的一种功能

我今天说的是mvc自带的过滤属性就可以实现这些操作

1.前端还是需要准备一些权限信息 权限code可以是系统内部的所有页面网址,当然还有一些通用权限,如增删改审批等

2.为页面权限配置操作权限比如某个页面只有修改权限没有删除审批权限

3.下面就需要上代码了,所有controller继承一个basecontroller,在basecontroller中可以初始化一些上下文信息或定义一些通用方法,basecontroller需要一个初始化验证属性,在这个初始化属性中就可以写我们的权限控制

    [MvcInitContextFilter]
public class BaseController : Controller
 public class MvcInitContextFilterAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
if (filterContext.ActionDescriptor.IsDefined(typeof(AllowAnonymousAttribute), true))
{
return;
}
var controller = filterContext.Controller as BaseController;
if (controller == null)
{
return;
}
if (filterContext.IsChildAction)
{
controller.UserContext = UserContext.Current;
return;
}
#region 写入usercontext
//dynamic user = controller.Session[StaticString.CookieLoginInfo];
controller.UserContext = UserContext.Instanse();
UserContext.Current = controller.UserContext; controller.InitContexts();
#endregion #region 方法权限过滤
var action = filterContext.RouteData.Values["action"].ToString();
//string url = filterContext.HttpContext.Request.Url.LocalPath.ToString(); var paras = filterContext.ActionParameters as Dictionary<string, object>; //ajax方法过滤
if (filterContext.HttpContext.Request.IsAjaxRequest())
{
List<string> ajaxActionList = new List<string>();
ajaxActionList.Add("save");
ajaxActionList.Add("list");
ajaxActionList.Add("setpost");
ajaxActionList.Add("del");
ajaxActionList.Add("delmore");
if (ajaxActionList.Any(o => action.ToLower().Contains(o)))
{
BaseRequest request = null; string Code = "";
int MenuAuthId = ;
Code = controller.Request.Params["Code"];
string MenuAuthIdStr = controller.Request.Params["MenuAuthId"];
if (string.IsNullOrEmpty(MenuAuthIdStr))
{
MenuAuthIdStr = paras.Keys.Contains("MenuAuthId") ?paras["MenuAuthId"].ToString():null;
}
if (Code==null)
{
Code = paras.Keys.Contains("Code") ? paras["Code"].ToString():null;
}
if (MenuAuthIdStr!=null){ int.TryParse(MenuAuthIdStr,out MenuAuthId); }
if ((!string.IsNullOrWhiteSpace(Code)) && MenuAuthId>)
{
request = new BaseRequest();
request.Code = Code;
request.MenuAuthId =MenuAuthId ;
}
else if (paras != null && paras.Count > )
{
KeyValuePair<string, object> pair = paras.First();
request = pair.Value as BaseRequest;
} if (MenuAuthId>&&!string.IsNullOrEmpty(Code))
{ }
else
{
//如果没有继承baserequest类就不做检查了
if (request == null)
{
return;
}
}
try
{ List<OperateAuth> operateAuths1 = CRoleAuthDAL.GetMenuAuths(controller.UserContext.CurrentUser.UserID, request.MenuAuthId);
if (string.IsNullOrEmpty(request.Code) || operateAuths1 == null ||
(!operateAuths1.Any(auth => auth.AuthCode.ToLower().Equals(request.Code.ToLower()))))
{
filterContext.HttpContext.Response.Write("您没有权限访问此页面");
filterContext.HttpContext.Response.End();
}
}
catch (Exception)
{ }
} } //action方法过滤
else
{
var menuAuthIdStr = controller.Request.QueryString["menuAuthId"];
if (!string.IsNullOrEmpty(menuAuthIdStr))
{
var menuAuthId = ;
if (menuAuthIdStr.Contains(","))
{
menuAuthIdStr = menuAuthIdStr.Split(',')[];
}
menuAuthId = int.Parse(menuAuthIdStr);
controller.ViewData["auth"] = CRoleAuthDAL.GetMenuAuths(controller.UserContext.CurrentUser.UserID, menuAuthId);
controller.ViewData["menuAuthId"] = menuAuthIdStr;
}
}
}
#endregion
}

这里面只是为了实现我自己的需求多加了一些东西,可以满足自己需求上做修改

这个MenuAuthId 是指页面权限id,对应code是前台request或者ajax里面传递的是否有这个权限然后继续下去的通用权限,如增删改

对于页面,这里还可以根据页面权限id或者页面url从数据库中查出,当前页面所能拥有的权限,然后通过viewdata的方式传递给页面,方便页面相关按钮的显示隐藏

此处做的MenuAuthId 可以用页面的url代替,这样更通用,更简单,稍作修改即可

如有建议或意见可以加群223026227

利用mvc filterconfig属性实现权限验证的更多相关文章

  1. MVC 自定义AuthorizeAttribute 实现权限验证

    MVC内置的AuthorizeFilter先于Action/Result过滤器执行,为网站权限验证提供了很好的一套验证机制. 通过自定义的AuthorizeAttribute可以实现对用户权限的验证. ...

  2. MVC权限验证过滤器

    Action属性,权限设定属性   [AttributeUsage(AttributeTargets.Method, Inherited = true, AllowMultiple = false)] ...

  3. 关于filter web api mvc 权限验证 这里说的够详细了。。。

    参考:http://www.cnblogs.com/willick/p/3331520.html Filter(筛选器)是基于AOP(面向方面编程)的设计,它的作用是对MVC框架处理客户端请求注入额外 ...

  4. 【3】.net MVC 使用IPrincipal进行Form登录即权限验证

    1.在MVC项目中添加用户类,可以根据实际项目需求添加必要属性 public class UserData { /// <summary> /// ID /// </summary& ...

  5. ASP.NET MVC权限验证 封装类

    写该权限类主要目地 为了让权限配置更加的灵活,可以根据SQL.json.或者XML的方式来动态进行页面的访问控制,以及没有权限的相关跳转. 使用步骤 1.要建一个全局过滤器 //受权过滤器 publi ...

  6. Spring MVC 使用拦截器优雅地实现权限验证功能

    在上一篇 SpringAOP 实现功能权限校验功能 中虽然用AOP通过抛异常,请求转发等勉强地实现了权限验证功能,但感觉不是那么完美,应该用拦截器来实现才是最佳的,因为拦截器就是用来拦截请求的,在请求 ...

  7. NET MVC权限验证

    ASP.NET MVC权限验证 封装类 写该权限类主要目地 为了让权限配置更加的灵活,可以根据SQL.json.或者XML的方式来动态进行页面的访问控制,以及没有权限的相关跳转. 使用步骤 1.要建一 ...

  8. C# MVC权限验证

    前言 之前一直没怎么接触过权限验证这块,刚好公司老平台改版,就有了这篇权限验证.此篇文章大致讲解下 精确到按钮级别的验证如何实现.以及权限验证设计的参考思路(菜鸟一枚,大神勿喷). 在开发大项目的时候 ...

  9. Web用户的身份验证及WebApi权限验证流程的设计和实现 asp.net mvc AllowAnonymous 不起作用, asp.net mvc 匿名访问

    原文地址: https://blog.csdn.net/zjlovety/article/details/17095627 前言:Web 用户的身份验证,及页面操作权限验证是B/S系统的基础功能,一个 ...

随机推荐

  1. java基础,流程控制语句

                                流程控制语句 条件语句:              if语句:                        *if(条件 boolean类型) ...

  2. redhat6.4配置yum

    redhat6.4配置本地yum 1. 挂载(我喜欢放在/mnt下面)     mount -t auto *** /mnt/redhat     或     cp *** /mnt/redhat   ...

  3. SSH三大框架的各自工作流程

    一.Struts2的工作流程:1.用户在客户端发起请求,客户端会初始化一个servlet容器请求:2.servlet容器把请求会传递给context容器,context容器找到目标web工程.3.进行 ...

  4. JAVA入门[22]—thymeleaf

    一.thymeleaf官网 官网:https://www.thymeleaf.org/index.html doc:https://www.thymeleaf.org/documentation.ht ...

  5. arcgis for javascript 自定义infowindow

    arcgis 自己的infowindow 太难看了,放在系统中与系统中的风格格格不入,在参考了网上的一些资料后,整理编写了适合自己系统的infowindow,与大家分享. 1.自定义展示效果 2.In ...

  6. 【CSS】less 学习小结

    1. less 使用 less 可直接使用浏览器解析 or  使用node 的grunt/gulp 解析成传统css . 推荐开发环境直接使用less 文件调试, 生产环境部署解析好的css 2. l ...

  7. reversing.kr easy crack 之write up

    之前学逆向感觉学得一踏糊涂,这阶段好多师傅带我,一定要好好学,重新开始,认真学习. 来看打开可执行文件: 用ollydbg载入,单步执行后停到了入口点: 分析入口点,并没有加壳,于是F9执行程序,跳出 ...

  8. Eclipse中将hadoop项目放在集群中运行

    1.加入配置文件到项目源码目录下(src) <configuration> <property> <name>mapreduce.framework.name< ...

  9. 蓝桥杯算法训练_2的次幂表示+前缀表达式+Anagrams问题+出现次数最多的整数

    今天做了4个简单的题,题目虽然是简单,但是对于我这样的小白,还是有很多东西需要学习的. 2的次幂表示 上面就是题目,题目说的也很清晰了,接下来就是递归的实现: #include<iostream ...

  10. [HEOI2015]兔子与樱花 树规+贪心

    鬼能想到是个贪心.明明觉得是树规啊..又完美爆零.. 从叶子节点往上更新,能保证最优解(这块想了半天). 证明:当你的子树上有能删的点而你不删时,可能会对子树的根节点有利,最好的情况是使子树根节点由不 ...