Golang 开发企业级资源权限管理【第一步表设计】

aside section ._1OhGeD · · 4212 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

我们做企业级系统,权限控制主要分三类。

【功能权限】:对菜单栏目进行权限控制,查询,增加,删除,修改功能,一般来说这种对资源的权限控制模型可以做到比较统一(用户、角色、资源)。

【数据权限】:哪些人能看到哪些数据,例如淘宝本人只能看自己订单,北京地区部门领导可以看到电器类部门订单, 最高领导能看到人所有订单等等。 这种跟业务高度相关,(网络上资料暂时比较少)原理主要是对SQL语句添加where 条件

【字段权限】:订单能看到哪些字段,如供应商,看不到内部价、 出厂价等信息。 (网络上资料暂时比较少)实现原理跟数据权限控制是一致的。对SQL语句添加select 条件

这次,我们主要讲解最常用的功能权限控制的实现过程,这类WEB权限控制,在任意后端语言上都可以实现Java、Golang、PHP、Nodejs、Python等等,主要理解其数据模型。

我们先看最终实现的功能效果。

1.角色管理页面

image.png

这里可以新增角色,删除角色, 注意的是,这里有一个最高权限角色超级管理员,不允许删除,还有一个批量导入管理员默认角色。

2.新增角色,编辑角色

image.png

这里把系统大部分资源路由进入权限控制,说的大部分是因为有些页面权限是不需要进行控制,例如登陆、注册、以及后台一些下拉选项(读取的数据库接口)。

3.管理员列表

image.png

4.给管理员分配权限

image.png

涉及数据表

1.用户表

用户表主要增加字段 rolesId 角色ID,了解这个用户是哪个角色。

2.角色表

角色表主要记录这个角色的名称,描述

CREATE TABLE `t_roles` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL DEFAULT '' COMMENT '角色名称',
  `desc` varchar(50) NOT NULL DEFAULT '' COMMENT '描述',
  `createdAt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=10003 DEFAULT CHARSET=utf8mb4 COMMENT='角色表';

3.路由表

这个表主要添加平台所有需要控制的路由方法,也可以不建表,写到配置文件里面,因为开发完需要控制的权限是固定的。上图:新增编辑角色,显示的就是这个表的内容

CREATE TABLE `t_roles_tree` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(50) NOT NULL DEFAULT '' COMMENT '路由名称',
  `path` varchar(50) NOT NULL COMMENT '路径',
  `methods` varchar(50) NOT NULL COMMENT '方法',
  `createdAt` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `parentId` varchar(50) NOT NULL DEFAULT '' COMMENT '级别',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8mb4 COMMENT='系统所有路由表';

4.权限表

权限表记录了,这个角色有哪些权限。 核心字段为 [角色ID,资源url, 方法]。这里用casbin 实现,因为casbin封装了很多验证函数,节省了一部分工作量。

CREATE TABLE `casbin_rule` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `p_type` varchar(255) NOT NULL DEFAULT '',
  `v0` varchar(255) NOT NULL DEFAULT '' COMMENT '角色',
  `v1` varchar(255) NOT NULL DEFAULT '' COMMENT 'Url',
  `v2` varchar(255) NOT NULL DEFAULT '' COMMENT '方法',
  `v3` varchar(255) NOT NULL DEFAULT '',
  `v4` varchar(255) NOT NULL DEFAULT '',
  `v5` varchar(255) NOT NULL DEFAULT '',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=48 DEFAULT CHARSET=utf8mb4;
权限逻辑.png

这一篇最后介绍下 Casbin是一个强大的、高效的开源访问控制框架,其权限管理机制支持多种访问控制模型。并指出主流后端语言,目前Casbin权限控制支持的语言有Go Java Node.js PHP Python C# Delphi,使用Casbin可以极大提高权限控制开发效率。当然你不用这个库,自己设计表,实现原理是一样。


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:aside section ._1OhGeD

查看原文:Golang 开发企业级资源权限管理【第一步表设计】

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

4212 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传