写该权限类主要目地
为了让权限配置更加的灵活,可以根据SQL、json、或者XML的方式来动态进行页面的访问控制,以及没有权限的相关跳转。
使用步骤
1、要建一个全局过滤器
//受权过滤器 public class AuthorizeFilter : AuthorizeAttribute { public override void OnAuthorization(AuthorizationContext filterContext) { } }
2、Gobal里注册 GlobalFilters.Filters.Add(new AuthorizeFilter());该过该全局过滤器
protected void Application_Start() { AreaRegistration.RegisterAllAreas(); GlobalConfiguration.Configure(WebApiConfig.Register); GlobalFilters.Filters.Add(new AuthorizeFilter()); FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); RouteConfig.RegisterRoutes(RouteTable.Routes); BundleConfig.RegisterBundles(BundleTable.Bundles); }
3、在过滤器中调用 SystemAuthorizeService.Start实现
(1)使用对象进行权限验证
public override void OnAuthorization(AuthorizationContext filterContext) { List smList = new List () { //用户1,2,3可以访问 area为admin 所有权限 new SystemAuthorizeModel() { SystemAuthorizeType= SystemAuthorizeType.Area, AreaName="admin" , UserKeyArray=new dynamic[] { 1,2,3 /*用户授权数组*/} }, //用户8,7可以访问 area为admin 控制器为:center 所有权限 new SystemAuthorizeModel() { SystemAuthorizeType= SystemAuthorizeType.Controller, AreaName="admin" , ControllerName="center", UserKeyArray=new dynamic[] { 8,7 /*用户授权数组*/} }, //用户1可以访问为 area为:null 控制器为:home 操作为:about 的请求 new SystemAuthorizeModel() { SystemAuthorizeType= SystemAuthorizeType.Action, ControllerName="home" , ActionName="about" , UserKeyArray=new dynamic[] { 1 } }, //给用户100和110所有页面权限 new SystemAuthorizeModel() { SystemAuthorizeType= SystemAuthorizeType.All, UserKeyArray=new dynamic[] { 100,110 } } }; SystemAuthorizeErrorRedirect sr = new SystemAuthorizeErrorRedirect(); sr.DefaultUrl = "/user/login";//没有权限都跳转到DefaultUrl //sr.ItemList=xx 设置更详细的跳转 SystemAuthorizeService.Start(filterContext, smList, sr, () => { //获取用户ID return 1; //用户ID为1,作为DEMO写死 ,当然了可以是SESSION也可以是COOKIES等 这儿就不解释了 }); }
(2)使用JSON转成对象进行验证
[
{ "SystemAuthorizeType": 1, "AreaName": "admin", "ControllerName": "center", "ActionName": null, "UserKeyArray": [ 1, 2, 3 ] }, { "SystemAuthorizeType": 1, "AreaName": "admin", "ControllerName": "center", "ActionName": null, "UserKeyArray": [ 8, 7 ] }, { "SystemAuthorizeType": 3, "AreaName": null, "ControllerName": "home", "ActionName": "about", "UserKeyArray": [ 1 ] }, { "SystemAuthorizeType": 0, "AreaName": null, "ControllerName": null, "ActionName": null, "UserKeyArray": [ 100, 110 ] }]
SystemAuthorizeService代码:
using System;using System.Collections.Generic;using System.Linq;using System.Linq.Expressions;using System.Web;using System.Web.Mvc;using System.Web.Routing;namespace Idea.Models.Filters{ /// /// 系统授权服务 /// 作者:sunkaixuan /// 时间:2015-10-25 /// public class SystemAuthorizeService { /// /// 启动系统授权 /// /// /// 所有验证项 /// 没有权限跳转地址 /// 获取当前用户ID public static void Start(AuthorizationContext filterContext, List systemAuthorizeList, SystemAuthorizeErrorRedirect errorRediect, Func