六 RBAC 模型、AJAX

六 RBAC 模型、AJAX

分支: git checkout -b 6.0.0_rbac_ajax

1. RBAC

1.1 RBAC 简介

1.1.1 Why? 为什么要进行权限控制
  • 如果没有权限控制, 系统的功能完全不设防, 全部暴露在所有用户面前, 用户登录以后可以使用系统中所有功能, 这是实际运行中不能接收的
  • 所以权限控制系统的目标就是管理一航局行为, 保护系统功能
1.1.2 Waht? 什么是权限控制
  • “权限” = “权利” + “限制”
1.1.3 How? 如何进行权限控制
1.1.3.1 定义资源
  • 资源就是系统中需要保护起来的功能, 具体形式很多: URL 地址、handler 方法、service 方法, 页面元素等等都可以定义为资源使用权限控制保护起来
1.1.3.2 创建权限
  • 一个功能复杂的项目会包含很多具体资源, 成千上万都有可能, 这么多资源逐个进行操作太麻烦了, 为了简化操作, 可以将相关的几个资源封装到一起, 打包成一个 "权限“同时分配给有需要的人

img

img

1.1.3.3 创建角色
  • 对于一个庞大的系统来说, 一方面需要保护的资源非常多, 另一方面操作系统的人也非常多, 把资源打包为权限是对操作的简化, 同样把用户划分为不同角色也是对操作的简化, 否则直接对一个个用户进行管理就会很繁琐
  • 所以角色就是用户的分组、父类。先把角色分配权限, 然后再把角色分配给用户, 用户以这个角色的身份操作系统就享有角色对应的权限了
1.1.3.4 管理用户
  • 系统中的用户其实是人操作系统时来登录系统的账户、密码
1.1.3.5 建立关联关系
  • 权限 -> 资源: 单向多对多
  • 角色 -> 权限: 单向多对多
  • 用户 -> 角色: 双向多对多

1.2. RBAC 权限模型

1.2.1 概念
  • 鉴定权限控制的核心是用户通过角色权限进行关联, 所以前面描述的权限控制系统可以提炼为一个模型: RBAC(Role-Base Access Control, 基于角色的访问控制)
  • 在 RBAC 模型中, 一个用户可以对应多个角色, 一个角色拥有多个权限, 权限具体定义用户可以做哪些事情
1.2.2 RBAC0~RBAC3

img

1.2.2.1 RBAC0
  • 最基本的 RBAC 模型, RBAC 模型的核心部分, 后面是那种升级版 RBAC 模型也都是建立在 RBAC 的基础上
1.2.2.2 RBAC1
  • 在 RBAC0 的基础上增加了角色之间的继承关系, 角色 A 继承角色 B 之后将具备 B 的权限在增加自己独有的其他权限, 比如: 付费会员角色基础普通会员角色, 那么付费会员除了普通会员的权限外还具备浏览付费内容的其他权限
1.2.2.3 RBAC2
  • 在 RBAC0 的基础上进一步增加了角色责任分离关系, 责任分离关系包含静态责任分离和动态责任分离两部分

    • 静态责任分离: 给用户分配角色是生效
      • 互斥角色: 权限上和互相制约的两个或多个角色就是互斥角色, 用户只能被分配到一组互斥角色中的一个角色。
        • 例如: 一个用户不能既有会计师角色又有审计师角色

img

      • 基数约束:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
RBAC(Role-Based Access Control)模型是一种基于角色的访问控制模型,它将用户的权限授予角色,而不是直接授予用户。这种模型的主要思想是将用户分配到角色中,然后将权限授予角色,从而简化了权限管理的复杂性。RBAC模型包括三个主要组成部分:用户、角色和权限。 RBAC模型的主要优点在于,它能够实现较为灵活和易于维护的访问控制,可以快速地调整和更新角色和权限,同时提供了更高的安全性和可管理性。它已经被广泛应用于企业和组织的信息安全管理中。 RBAC模型的实现需要考虑以下几个方面: 1. 角色的定义和分配:需要定义不同的角色,并将用户分配到相应的角色中。 2. 权限的定义和授予:需要定义不同的权限,并将权限授予相应的角色。 3. 角色的继承关系:可以将一个角色定义为另一个角色的子角色,从而继承其权限。 4. 用户和角色的关系:需要将用户分配到相应的角色中,从而获得相应的权限。 下面是一个简单的RBAC模型的示例代码: ```python class Role: def __init__(self, name): self.name = name self.permissions = set() def add_permission(self, permission): self.permissions.add(permission) class User: def __init__(self, name): self.name = name self.roles = set() def add_role(self, role): self.roles.add(role) class Permission: def __init__(self, name): self.name = name class RBAC: def __init__(self): self.roles = {} self.permissions = set() def add_role(self, role): self.roles[role.name] = role def add_permission(self, permission): self.permissions.add(permission) def grant_permission(self, role_name, permission_name): role = self.roles.get(role_name) if role: permission = Permission(permission_name) self.add_permission(permission) role.add_permission(permission) def get_allowed_permissions(self, user): permissions = set() for role in user.roles: permissions.update(role.permissions) return permissions ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值