【REST2SQL】14 基于角色的数据权限设计与实现

【REST2SQL】01RDB关系型数据库REST初设计
【REST2SQL】02 GO连接Oracle数据库
【REST2SQL】03 GO读取JSON文件
【REST2SQL】04 REST2SQL第一版Oracle版实现
【REST2SQL】05 GO 操作 达梦 数据库
【REST2SQL】06 GO 跨包接口重构代码
【REST2SQL】07 GO 操作 Mysql 数据库
【REST2SQL】08 日志重构增加输出到文件log.txt
【REST2SQL】09 给Go的可执行文件exe加图标和版本信息等
【REST2SQL】10 REST2SQL操作指南
【REST2SQL】11 基于jwt-go生成token与验证
【REST2SQL】12 REST2SQL增加Token生成和验证
【REST2SQL】13 用户角色功能权限设计


0 前言废话

0.1 常见的权限管理模型

  • ACL ACL的全称是 Access Control List (访问控制列表)
    ACL 是最简单的权限管理模型之一。它基于对象与主体之间的关系来控制访问权限。ACL 将权限直接与用户或用户组相关联,管理员直接给用户授予某些权限即可。
    这种模型适用于小型和简单系统,其中权限控制较为简单,并且角色和权限的变化较少。

  • RBAC(Role-Based Access Control,基于角色的访问控制)
    RBAC 是应用最广泛的权限管理模型之一。它通过定义角色和角色的权限集合来管理访问控制。用户被分配到角色,角色与权限相关联,从而精确地控制用户对系统资源的访问。
    RBAC 适用于大型系统,特别是那些需要灵活、可扩展的权限管理的场景。使用 RBAC 可以简化权限管理的复杂性并提高系统的安全性。
    RBAC权限管理的模式,最适合公司内部的管理系统,不适合对外互联网用户的系统。

  • ABAC(Attribute-Based Access Control,基于属性的访问控制)
    ABAC(Attribute-Based Access Control,基于属性的访问控制),又称为PBAC(Policy-Based Access Control,基于策略的访问控制),或CBAC(Claims-Based Access Control,基于声明的访问控制)。ABAC 是一种基于属性的权限管理模型,它根据多个属性(如用户属性、环境条件、时间等)来进行访问控制决策。ABAC 通过定义策略来决定用户是否有权访问特定的资源。
    这种模型适合于需要更细粒度、动态和灵活的访问控制的场景。ABAC 在复杂的环境中可以提供高度的可配置性和可扩展性。

0.2 数据权限分级

  • 系统级
  • 对象级,表或视图
  • 行级,表或视图的行
  • -列级,表或视图的具体字段

1 数据权限设计

权限管理的核心是角色,角色上接用户,下接功能,功能关联数据。
权限管理的5大实体 : 用户-角色=页面#数据,角色-数据对象关系
实体之间的关系:用户1对多角色,角色1对多页面,页面1对多数据,角色1对多数据。
实体及关系图如下:
在这里插入图片描述
此数据权限设计兼顾了灵活与通用。

  • 支持一个用户多角色,多角色都关联同一数据对象时,用户的数据权限是多个角色数据权限的并集。比如一个用户 user1 分配了2个角色 role1 和 role2,则user1 可以查阅 role1 和 role2 所有数据。
  • 根据角色的功能权限自动获取相关数据对象(视图或表),并在角色上定义数据权限约束 Where条件。

1.1 权限实体(表)设计

  • 用户表 s_user (p_id, s_name, s_passw…)
  • 角色表 s_role (p_id, s_name…)
  • 页面表 s_menu(p_id, s_name,s_page…)
  • 数据(对象)视图 user_tabs_views
  • 角色-数据权限表s_role_data(pf_role,pf_data,s_where)
    数据对象包括表和视图。
-- Oracle 数据库的表和视图
CREATE OR REPLACE VIEW USER_TABS_VIEWS AS
SELECT TABLE_NAME,TABLE_TYPE,COMMENTS,tab_cnt(table_name) as rowcount
FROM user_tab_comments
order by table_type,table_name;
comment on table USER_TABS_VIEWS is '用户表及视图';

1.2 权限关系(表)设计

  • 用户角色关系表 s_user_role (pf_user,pf_role…)
  • 角色功能权限关系表 s_role_menu (pf_role,pf_menu…)
  • 页面数据对象关系表 s_menu_data (pf_menu,pf_data…)
  • 角色数据对象权限关系表 s_role_data (PF_ROLE,PF_DATA,s_where,s_note…)
    角色项下所有功能页面关联的数据对象的集合(页面和数据是多对多的关系,此集合不去除了重复的数据对象)

1.3 角色数据权限视图设计

其它视图参阅 【REST2SQL】13 用户角色功能权限设计

  • 角色关联的数据对象视图,就是角色功能权限用到的数据对象。
	create or replace view role_data_v as
	select distinct m.pf_role, d.pf_data
	from S_MENU_DATA d
	left join s_role_menu m on m.pf_menu = d.pf_menu
	where m.pf_role is not null;
	comment on table ROLE_DATA_V is '角色关联的数据对象视图';
  • 角色数据权限重置连接表,就是角色功能权限或功能数据对象发生变化时,角色当前数据权限和应该拥有的数据权限对照视图
create or replace view role_data_join_v as
select "CROLE","CDATA","HROLE","HDATA"
from ( select pf_role as crole, pf_data as cdata from S_ROLE_DATA  ) c
full outer join (select pf_role as hrole
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值