服务端指南 | 基于角色的访问控制

原文地址:服务端指南 | 基于角色的访问控制 博客地址:blog.720ui.com/web

基于角色的访问控制,英文是 Role-Based Access Control,简称 RBAC。它经过创建用户与角色的对应关系,使得每一个用户能够拥有多个角色,每一个角色能够拥有多个权限。基于角色的访问控制会定义多个不一样的角色,不一样角色实际上就是一个权限的集合。基于角色的访问控制中,不一样角色之间具备高低之分,高权限角色能够访问低权限角色的资源,可是低权限角色每每不能访问高权限角色的资源。举个例子,一个教育性质的做业系统中存在老师角色与学生角色,老师角色与学生角色都具备查看做业的权限,可是学生角色不具备审批做业的权限,只有老师角色才具备审批做业的权限,若是学生角色能够进行这个操做,那么可能存在越权访问。同时,基于角色的访问控制遵照最小特权,应该授予所须要的完成其任务的最小角色,这样能够防止用户干坏事。bash

RBAC 是一种“用户-角色-权限”的受权模型,主要分为 RBAC0 基本模型、RBAC1 角色的分层模型、RBAC2 约束模型、RBAC3 统一模型。其中,RBAC0 是 RBAC 的核心,包括用户、角色、权限和会话。RBAC1 基于 RBAC0 进行扩展,是 RBAC 的角色分层模型,引入角色继承概念。RBAC2 基于 RBAC0 进行扩展,引入互斥角色的限制,互斥角色是指各自权限互相制约的两个角色,此外,还约束一个用户拥有的角色是有限的,一个角色拥有的权限是有限的,以及想要获取较高权限,首先须要拥有一个低级权限。RBAC3 基于 RBAC0 的基础上,将 RBAC1 和 RBAC2 进行整合,所以 RBAC3 是一种既有角色分层又有约束的一种模型。微信

本文主要基于 RBAC0 基本模型进行介绍“用户-角色-权限”的受权模型。基于角色的访问控制经过创建用户与角色的对应关系,使得每一个用户能够拥有多个角色,每一个角色能够拥有多个权限。ide

其中,权限限制了用户所能进行的相关操做。举个例子,一个教育性质的做业系统中存在老师角色与学生角色,学生角色具备查看做业与写做业的权限,老师角色具备查看做业与审批做业的权限,所以具备学生角色的用户是不能进行审批做业的操做。权限能够做用于菜单、API 接口、文件等资源。ui

在用户量大的状况下,能够对用户进行分组。此时,用户组拥有一个角色,那么用户组内的全部用户都将拥有这个角色。换句话说,引入用户组的概念后,能够创建用户组与角色的对应关系,那么用户组内的全部用户都会间接地与角色发生关系。spa

在实际业务开发过程,Java 语言中的 Spring Security 与 Apache Shiro 均可以创建基于角色的访问控制。这里,演示了 Spring Security 的权限拦截配置,其中设置不一样角色对 URL 地址的访问权限。code

@EnableWebMvcSecurity
public class ApiSecurityConfig {
    @Override
    protected void onConfigure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
            // 匹配"/students/**"的全部 GET 操做,无须要任何身份认证
            .antMatchers(HttpMethod.GET, "/students/**").permitAll()
            // 匹配"/students/**"的全部 POST 操做,须要用户拥有 teacher 角色
            .antMatchers(HttpMethod.POST, "/students/**").hasAuthority("teacher")
            // 匹配"/students/**"的全部(其余)操做,须要用户拥有 admin 角色
            .antMatchers("/students/**").hasAnyAuthority("admin");
            // 其余的 URL 地址均须要加身份认证
            .antMatchers("/**").anonymous().anyRequest().authenticated();
    }
 
    @Override
    public void configure(WebSecurity web) throws Exception {
    }
}
复制代码

总结下,基于角色的访问控制,经过创建用户与角色的对应关系,使得每一个用户能够拥有多个角色,每一个角色能够拥有多个权限。用户根据拥有的角色进行操做与资源访问。cdn

(完)blog

更多精彩文章,尽在「服务端思惟」微信公众号! 继承

相关文章
相关标签/搜索