前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >【尚筹网】六、RBAC 权限控制模型和 Ajax 请求

【尚筹网】六、RBAC 权限控制模型和 Ajax 请求

作者头像
用户11332765
发布2024-12-25 10:13:28
发布2024-12-25 10:13:28
9300
代码可运行
举报
文章被收录于专栏:编程
运行总次数:0
代码可运行

简介

为什么要进行权限控制

如果没有权限控制,系统的功能完全不设防,全部暴露在所有用户面前。用户登录以后可以使用系统中的所有功能。这是实际运行中不能接受的。

所以权限控制系统的目标就是管理用户行为,保护系统功能。

什么是权限控制

“权限”=“权力”+“限制”

如何进行权限控制

定义资源

资源就是系统中需要保护起来的功能。具体形式很多:URL地址、handler方法、service方法、页面元素等等都可以定义为资源使用权限控制系统保护起来。

创建权限

一个功能复杂的项目会包含很多具体资源,成千上万都有可能。这么多资源逐个进行操作太麻烦了。为了简化操作,可以将相关的几个资源封装到起,打包成“权限”同时分配给有需要的人。

创建角色

对于一个庞大系统来说,一方面需要保护的资源非常多,另一方面操作系统的人也非常多。把资源打包为权限是对操作的简化,同样把用户划分为不同角色也是对操作的简化。否则直接针对一个个用户进行管理就会很繁琐。

所以角色就是用户的分组、分类。先给角色分配权限,然后再把角色分配给用户,用户以这个角色的身份操作系统就享有角色对应的权限了。

管理用户

系统中的用户其实是人操作系统时用来登录系统的账号、密码。

建立关联关系
  • 权限→资源:单向多对多
    • Java 类之间单向:从权限实体类可以获取到资源对象的集合,但是通过资源获取不到资源
    • 数据库表之间多对多:
      • 一个权限可以包含多个资源
      • 一个资源可以被分配给多个不同的权限
  • 角色→权限:单向多对多
    • Java 类之间单向:从角色实体类可以获取到权限对象的集合,但是通过权限获取不到角色
    • 数据库表之间多对多:
      • 一个角色可以包含多个权限
      • 一个权限可以被分配给多个不同的角色
  • 用户→角色:双向多对多
    • Java 类之间双向:可以通过用户获取它具备的角色,也可以看一个角色包含哪些用户
    • 数据库表之间多对多:
      • 一个角色可以包含多个用户
      • 一个用户可以身兼数职

多对多关联关系在数据库中的表示

没有中间表的情况

image-20241202224847758
image-20241202224847758

如果只能在一个外键列上存储关联关系数据,那么现在这个情况无法使用 SQL 语句进行关联查询

有中间表的情况

image-20241202225243900
image-20241202225243900
代码语言:javascript
代码运行次数:0
复制
select t_student.id, t_student.name 
from t_student 
	left join t_inner on t_student.id = t_inner.student_id
	left join t_subject on t_inner.subject_id = t_subject.id
where t_subject.id = 1;

中间表的主键生成方式

方式一:另外设置字段作为主键
image-20241202225754610
image-20241202225754610
方式二、使用联合主键
image-20241202225856418
image-20241202225856418

组合起来 不能重复即可!

RBAC 权限模型

概念

鉴于权限控制的核心是用户通过角色与权限进行关联,所以前面描述的权限控制系统可以提炼为一个模型:RBAC(Role-BasedAccessControl,基于角色的访问控制)。

在 RBAC 模型中,一个用户可以对应多个角色,一个角色拥有多个权限,权限具体定义用户可以做哪些事情。

RBAC0~RBAC3

RBACO

最基本的 RBAC 模型,RBAC 模型的核心部分,后面三种升级版 RBAC 模型也都是建立在 RBACO 的基础上。

RBAC1

在 RBACO 的基础上增加了角色之间的继承关系。角色A继承角色B之后将具备B的权限再增加自己独有的其他权限。比如:付费会员角色继承普通会员角色,那么付费会员除了普通会员的权限外还具备浏览付费内容的权限。

image-20241202230421718
image-20241202230421718
RBAC2
image-20241202231045848
image-20241202231045848

在 RBACO 的基础上进一步增加了角色责任分离关系。责任分离关系包含静态责任分离和动态责任分离两部分。

  • 静态责任分离:给用户分配角色时生效
    • 互斥角色:权限上相互制约的两个或多个角色就是互斥角色。用户只能被分配到一组互斥角色中的一个角色。 例如:一个用户不能既有会计师角色又有审计师角色。
    • 基数约束:
      • 一个角色对应的访问权限数量应该是受限的
      • 一个角色中用户的数量应该是受限的
      • 一个用户拥有的角色数量应该是受限的
    • 先决条件角色:用户想拥有A角色就必须先拥有B角色,从而保证用户拥有X权限的前提是拥有Y权限。 例如:“金牌会员”角色只能授予拥有“银牌会员”角色的用户,不能直接授予普通用户。
  • 动态责任分离:用户登录系统时生效
    • 一个用户身兼数职,在特定场景下激活特定角色
      • 马云在阿里巴巴内部激活创始人角色
      • 马云在某企业级论坛上激活演讲嘉宾角色
RBAC3

RBAC3 是在 RBAC0 的基础上同时添加 RBAC2 和 RBAC3 的约束,最全面、最复杂。

基本 RBAC 模型

image-20241202231916947
image-20241202231916947

扩展 RBAC 模型

image-20241202232046007
image-20241202232046007

Ajax 请求

异步工作方式

图示
image-20241203230753799
image-20241203230753799
代码
代码语言:javascript
代码运行次数:0
复制
$(function () {
    $('#asyncBtn').click(function () {
       console.log('ajax 函数之前');
       $.ajax({
          'url': 'test/ajax/async.html',
          'type': 'post',
          'dataType': 'text',
          'success': function (responseText) {
             // success 是接收到服务器端响应后执行
             console.log('ajax 函数内部的 success 函数' + responseText);
          }
       });
       // 在 $.ajax() 执行完成后执行,不等待 success 函数
       console.log('ajax 函数之后');
    });
});
打印效果
image-20241203231200639
image-20241203231200639

同步工作方式

图示
image-20241204212842647
image-20241204212842647
代码
代码语言:javascript
代码运行次数:0
复制
$(function () {
    $('#asyncBtn').click(function () {
       console.log('ajax 函数之前');
       $.ajax({
          'url': 'test/ajax/async.html',
          'type': 'post',
          'dataType': 'text',
          // 关闭异步工作模式,使用同步方式工作,此时:所有操作在同一个线程内按顺序执行
          'async': false,
          'success': function (responseText) {
             // success 是接收到服务器端响应后执行
             console.log('ajax 函数内部的 success 函数' + responseText);
          }
       });
       // 在 $.ajax() 执行完成后执行,不等待 success 函数
       console.log('ajax 函数之后');
    });
});
打印效果

本质

  • 同步:同一个线程内部按顺序执行
  • 异步:多个线程同时并行执行,谁也不等谁
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-12-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 简介
    • 为什么要进行权限控制
    • 什么是权限控制
    • 如何进行权限控制
      • 定义资源
      • 创建权限
      • 创建角色
      • 管理用户
      • 建立关联关系
  • 多对多关联关系在数据库中的表示
    • 没有中间表的情况
    • 有中间表的情况
    • 中间表的主键生成方式
      • 方式一:另外设置字段作为主键
      • 方式二、使用联合主键
  • RBAC 权限模型
    • 概念
    • RBAC0~RBAC3
      • RBACO
      • RBAC1
      • RBAC2
      • RBAC3
    • 基本 RBAC 模型
    • 扩展 RBAC 模型
  • Ajax 请求
    • 异步工作方式
      • 图示
      • 代码
      • 打印效果
    • 同步工作方式
      • 图示
      • 代码
      • 打印效果
    • 本质
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档