WebSecurity角色认证

public class MyAuthorizeAttribute : System.Web.Mvc.AuthorizeAttribute
    {
        public new string[] Roles { get; set; }

        protected override bool AuthorizeCore(HttpContextBase httpContext)
        {
            bool result = false;
            if (httpContext == null)
            {
                throw new ArgumentNullException("HttpContext");
            }
            if (!httpContext.User.Identity.IsAuthenticated)
            { }
            if (Roles != null && Roles.Any(httpContext.User.IsInRole))
            {
                result = true;
            }

            if (!result)
            {
                httpContext.Response.StatusCode = 403;
            }
            return result;

        }

        public override void OnAuthorization(System.Web.Mvc.AuthorizationContext filterContext)
        {
            string controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName;
            string actionName = filterContext.ActionDescriptor.ActionName;
            string roles = GetActionRoles(actionName, controllerName);
            if (!string.IsNullOrWhiteSpace(roles))
            {
                this.Roles = roles.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
            }

            base.OnAuthorization(filterContext);

            if (filterContext.HttpContext.Response.StatusCode == 403)
            {
                filterContext.Result = new RedirectResult("http://www.baidu.com/");

            }

        }

        private string GetActionRoles(string action, string controller)
        {
            XElement rootElement = XElement.Load(HttpContext.Current.Server.MapPath("/") + "ActionRoles.xml");
            XElement controllerElement = FindElementByAttribute(rootElement, "Controller", controller);
            if (controllerElement != null)
            {
                XElement actionElement = FindElementByAttribute(controllerElement, "Action", action);
                if (actionElement != null)
                {
                    return actionElement.Value;
                }
            }
            return "";
        }

        private XElement FindElementByAttribute(XElement xElement, string tagName, string attribute)
        {

            return xElement.Elements(tagName).FirstOrDefault(x => x.Attribute("name").Value.Equals(attribute, StringComparison.OrdinalIgnoreCase));
        }
    }
<?xml version="1.0" encoding="utf-8" ?>
<Roles>
  <Controller name="Home">
    <Action name="Index"></Action>
    <Action name="About">user</Action>
    <Action name="Contact">admin</Action>
    <Action name="Tips">admin</Action>
  </Controller>
</Roles>

用WebSecurity认证方式,相当于普通方式将登陆信息保存在session里。

时间: 2024-10-11 17:49:05

WebSecurity角色认证的相关文章

关于身份认证、角色认证和权限认证的shiro-web例子

shiro是Java的一个安全框架,其中认证.授权也是其核心知识.下面以一个maven构建的运用shiro框架的Web项目示例进行 分析和讲解,来理解shiro关于身份认证.和角色认证及权限认证的处理过程. 一.shiro集成web项目需配置的地方 说明:在进行如下配置之前,需建立maven管理的web项目(参考创建maven管理的web项目).这里不再赘述. 1.pom.xml文件添加shiro依赖的jar包 2.web.xml配置添加 初始化shiro环境配置 3.shiro.ini配置 二

基于FormsAuthentication的用户、角色身份认证

一般情况下,在我们做访问权限管理的时候,会把用户的正确登录后的基本信息保存在Session中,以后用户每次请求页面或接口数据的时候,拿到 Session中存储的用户基本信息,查看比较他有没有登录和能否访问当前页面. Session的原理,也就是在服务器端生成一个SessionID对应了存储的用户数据,而SessionID存储在Cookie中,客户端以后每次请求都会带上这个 Cookie,服务器端根据Cookie中的SessionID找到存储在服务器端的对应当前用户的数据. FormsAuthen

基于FormsAuthentication的用户、角色身份认证(转)

一般情况下,在我们做访问权限管理的时候,会把用户的正确登录后的基本信息保存在Session中,以后用户每次请求页面或接口数据的时候,拿到 Session中存储的用户基本信息,查看比较他有没有登录和能否访问当前页面. Session的原理,也就是在服务器端生成一个SessionID对应了存储的用户数据,而SessionID存储在Cookie中,客户端以后每次请求都会带上这个 Cookie,服务器端根据Cookie中的SessionID找到存储在服务器端的对应当前用户的数据. FormsAuthen

认证管理

.NET Core中的认证管理解析 .NET Core中的认证管理解析 0x00 问题来源 在新建.NET Core的Web项目时选择“使用个人用户账户”就可以创建一个带有用户和权限管理的项目,已经准备好了用户注册.登录等很多页面,也可以使用AuthorizeAttribute进行各种权限管理,看起来似乎十分方便.不过生成的代码都替我干了些什么我一团雾水.看了下生成的数据表,功能也挺复杂的.实际上我需要的只是基于用户和角色的认证管理,而且用户资料是使用现有的库,但使用.NET Core自带的认证

Flask实现基于角色的访问控制(RBAC)

Flask的核心在于"Micro",因此它不像Django拥有很多功能,尤其是认证系统.因此使用Flask要自己写一个认证系统.下面就给大家分享一下简单的Flask实现RBAC.下面都是在models.py文件的代码 1.权限常量 class Permission: COMMENT = 0x02 ADMINISTER = 0x80 2.角色表 class Role(db.Model): __tablename__ = 'roles' id =db.Column(db.Integer,p

Shrio认证详解+自定义Realm

Authentication(身份认证)是Shiro权限控制的第一步,用来告诉系统你就是你. 在提交认证的时候,我们需要给系统提交两个信息: Principals:是一个表示用户的唯一属性,可以是用户名,邮箱之类的. Credentials:是证明用户身份的证书,可以是密码或者指纹之类的. 认证主要分为三步: 1.收集认证信息 2.提交认证信息 3.如果认证成功,则允许访问,否则就拒绝访问或者重试. 收集认证信息: 在入门的例子中,使用了一个UsernamePasswordToken来收集用户的

【Shiro】Apache Shiro架构之权限认证(Authorization)

上一篇博文总结了一下Shiro中的身份认证,本文主要来总结一下Shiro中的权限认证(Authorization)功能,即授权.如下: 本文参考自Apache Shiro的官方文档:http://shiro.apache.org/authorization.html. 本文遵循以下流程:先介绍Shiro中的权限认证,再通过一个简单的实例来具体说明一下API的使用(基于maven). 1. 权限认证的核心要素 权限认证,也就是访问控制,即在应用中控制谁能访问哪些资源.在权限认证中,最核心的三个要素

RestFramework自定制之认证、权限、限制访问频率

认证 所谓认证就是检测用户登陆与否,通常与权限对应使用.网站中都是通过用户登录后由该用户相应的角色认证以给予对应的权限. 自定制认证规则的重点是继承内置的BaseAuthentication类,重写其authenticate()方法 方式一:通过url传参进行认证 from django.conf.urls import url, include from app01.views import TestView urlpatterns = [ url(r'^test/', TestView.as

NET Core中的认证管理解析

2016-08-19 07:15 0x00 问题来源 在新建.NET Core的Web项目时选择"使用个人用户账户"就可以创建一个带有用户和权限管理的项目,已经准备好了用户注册.登录等很多页面,也可以使用AuthorizeAttribute进行各种权限管理,看起来似乎十分方便.不过生成的代码都替我干了些什么我一团雾水.看了下生成的数据表,功能也挺复杂的.实际上我需要的只是基于用户和角色的认证管理,而且用户资料是使用现有的库,但使用.NET Core自带的认证组件必须要依赖EF,表的结构