美文网首页GolangPHP经验分享
Golang 开发企业级资源权限管理【第一步表设计】

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

作者: 后端云技术分享 | 来源:发表于2019-10-14 10:09 被阅读0次

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

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

【数据权限】:哪些人能看到哪些数据,例如淘宝本人只能看自己订单,北京地区部门领导可以看到电器类部门订单, 最高领导能看到人所有订单等等。 这种跟业务高度相关,(网络上资料暂时比较少)原理主要是对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可以极大提高权限控制开发效率。当然你不用这个库,自己设计表,实现原理是一样。

相关文章

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

    我们做企业级系统,权限控制主要分三类。 【功能权限】:对菜单栏目进行权限控制,查询,增加,删除,修改功能,一般来说...

  • springcloud 中 zuul 权限认证

    一般情况下权限管理的模块会设计 用户表、角色表、资源(权限/url)表 传统的单体应用里我们会用shiro 来进行...

  • 权限管理(React)

    系统权限 本文主要是总结前段时间项目中权限管理这块开发设计,包括:资源(路由级)权限、操作(按钮级)权限,以及登录...

  • 数据库 权限设计

    数据库 权限设计 -系统权限管理设计-通用权限管理设计 之 数据库结构设计 权限 用户 角色 组 用户表

  • SSM(三)Shiro使用详解

    前言 相比有做过企业级开发的童鞋应该都有做过权限安全之类的功能吧,最先开始我采用的是建用户表,角色表,权限表,之后...

  • 权限方面数据库的设计

    权限设计 管理员表_admin 角色表_admin_role 菜单表_menu 菜单权限表_admin_role_...

  • 产品 | 权限设计=功能权限+数据权限

    权限设计=功能权限+数据权限 权限管理 Authority Management 目前主要是通过用户、角色、资源三...

  • 模型设计

    一、模型整体设计 二、模型说明 该设计参考现在比较通用的权限管理设计模式,权限管理模型包括 2.1 用户表 ...

  • 浅谈业务管理系统权限问题

    summary 开发后台管理系统,一般少不了权限分配问题,就拿我目前正在开发的业务管理系统来说吧,使用数据库设计表...

  • 原创-大数据平台权限设计分享-Hive库表权限

    权限目标 可通过界面管理用户访问hive库表权限,权限设计模型如下图 用户拥有hive库表权限列表image.pn...

网友评论

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

    本文链接:https://www.haomeiwen.com/subject/vxiapctx.html