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

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

作者: 1a5ebb4ca52a | 来源:发表于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 开发企业级资源权限管理【第一步表设计】

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