1.概念

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

2.REAC0~RBAC3

1.RBAC0

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

2.RBACA1

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

3.RBAC2

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

  • 静态责任分离:给用户分配角色时生效
    1. - 互斥角色:杈限上相互制约的两个或多个角色就是互斥角色。用户只能被分配到一组互斥角色中的一个角色。

例如:一个用户不能既有会计师角色又有审计师角色。

  - 基数约束:
     - 一个角色对应的访问权限数量应该是受限的
     - 一个角色中用户的数量应该是受限的
     - 一个用户拥有的角色数量应该是受限的
  - 先决条件角色:用户想拥有 A 角色就必须先拥有 B 角色,从而保证用户拥有 X 权限的前提是拥有 Y权限。

例如:“金牌会员”角色只能授予拥有“银牌会员”角色的用户,不能直接授予普通用户。

  • 动态责任分离:用户登录系统时生效
    - 一个用户身兼数职,在特定场景下激活特定角色
       - 马云在阿里巴巴内部激活创始人角色
       - 马云在某企业级论坛上激活演讲嘉宾角色
    

    4.RBAC3

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

    3.Ajax的同步和异步请求

    1.异步的工作方式

    1.图解

    image.png

    2.代码

    <script type="text/javascript">
      $(function () {
          $("#asyncBtn").click(function () {
              console.log("ajax函数之前");
              $.ajax({
                  "url":"test/ajax/async.html",
                  "type":"post",
                  "dataType":"text",
                  "success":function (response) {
                      // success是接收到服务器端响应后执行
                      console.log("ajax函数内部的success函数"+response);
                  }
              });
              // $.ajax()执行完成后执行,不等待success函数
              console.log("ajax函数之后");
          });
       });
    

    3.打印效果

    以下结果每次执行不一定完全相同。
    image.png

    2.同步的工作方式

    1.图解

    image.png

    2.代码

    $(function () {
          $("#asyncBtn").click(function () {
              console.log("ajax函数之前");
              $.ajax({
                  "url":"test/ajax/async.html",
                  "type":"post",
                  "dataType":"text",
                  "async":false, // 关闭异步工作模式,使用同步方式工作。此时:所有操作在同一线程中。结果一定一样。
                  "success":function (response) {
                      // success是接收到服务器端响应后执行
                      console.log("ajax函数内部的success函数"+response);
                  }
              });
              });
    

    3.打印效果

    以下结果每次执行一定完全相同。
    image.png

    3.本质

    同步:同一个线程内部按顺序执行。
    异步:多个线程同时并行执行。