欢迎访问 生活随笔!

尊龙游戏旗舰厅官网

当前位置: 尊龙游戏旗舰厅官网 > > 编程问答 >内容正文

编程问答

gorm框架:user role用户角色一对一关联model编写 -尊龙游戏旗舰厅官网

发布时间:2025/1/21 编程问答 5 豆豆
尊龙游戏旗舰厅官网 收集整理的这篇文章主要介绍了 gorm框架:user role用户角色一对一关联model编写 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

一、目录结构

我们建立rbac应用的目录结构如下图所示

config目录:配置文件例如数据库连接信息

controller目录:所有请求注入控制器来进行处理

model目录:与数据表映射和请求响应需要用到的结构体

static目录:应用静态文件gin需要加载这些静态文件以供应用使用

view目录:应用模板视图文件存放处

二、使用docker搭建一个简单的mysql环境(确保系统已安装docker)

1.拉取镜像

docker pull mysql:5.7.28

2.镜像拉取成功后,我们在宿主机上来定义mysql的配置文件,用于挂载容器中的配置文件

新建文件:/usr/local/docker/mysql/my.cnf

[mysql] prompt = [\\u@\\p][\\d]>\\_ auto-rehash[mysqld] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql #log-error = /var/log/mysql/error.log bind-address = 0.0.0.0 # disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 port=3306 sql_mode = "strict_trans_tables,no_engine_substitution,no_zero_date,no_zero_in_date,error_for_division_by_zero,no_auto_create_user" autocommit = 1 server-id = 11 character_set_server=utf8mb4 transaction_isolation = read-committed explicit_defaults_for_timestamp = 1 max_allowed_packet = 64m event_scheduler = 1

4.根据镜像生成mysql容器

docker run -d \ --name mysql \ -p 3306:3306 \ -v /usr/local/docker/mysql/my.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf \ -e mysql_root_password=root \ --restart="always" \ mysql:5.7.28

上面命令运行了一个mysql实例,并且设置了密码为:root

我们进入容器并创建一个数据库名为:ginrbac

三.使用gorm来连接并生成rbac的表结构

什么是orm?

即object-relationl mapping,它的作用是在关系型数据库和对象之间作一个映射,这样,我们在具体的操作数据库的时候,就不需要再去和复杂的sql语句打交道,只要像平时操作对象一样操作它就可以了 。

gorm中文文档地址:https://gorm.io/zh_cn/docs/index.html

1.我们在主目录下新建一个config.ini文件,来作为我们的配置文件内容如下:

#gin运行模式:'debug','release' appmode = debug #运行的端口号 appport = 8081 #mysql相关配置 mysqluser = root mysqlpwd = root mysqldb = ginrbac mysqloption = "charset=utf8mb4&parsetime=true&loc=local"

我们使用:https://github.com/go-ini/ini类库来读取配置文件

首先我们安装需要用到的2个类库

go get -u gopkg.in/ini.v1 go get -u github.com/jinzhu/gorm"

2.我们在model目录下新建3个文件来对应“用色”,“用户”,“权限”表

2.1 role.go文件:

package modelimport ("github.com/jinzhu/gorm" )type role struct {gorm.modelname string `json:"name" gorm:"type:varchar(30);not null;comment:'角色名称'"`rules string `json:"rules" gorm:"type:varchar(255);not null;comment:'角色拥有的权限节点'"`status int `json:"status" gorm:"type:tinyint(1);not null;default:1;comment:'状态:1 启用 0 禁用'"` }

2.2 user.go文件:

package modelimport ("github.com/jinzhu/gorm" )type user struct {gorm.modelusername string `json:"username" gorm:"type:varchar(50);not null; comment:'用户名'"`password string `json:"password" gorm:"type:varchar(128);not null; comment:'密码'"`roleid int `json:"role_id" gorm:"type:int;not null; comment:'角色id'"`status int `json:"status" gorm:"type:tinyint(1);not null; comment:'状态:1启用 0禁用';default:1"` }

2.3 node.go文件(权限节点表):

package modelimport ("github.com/jinzhu/gorm" )type node struct {gorm.modelname string `json:"name" gorm:"type:varchar(50);not null;comment:'节点名称'"`path string `json:"path" gorm:"type:varchar(50);not null;comment:'节点路径'"`pid int `json:"pid" gorm:"type:int(11);not null;comment:'所属节点id'"`sort int `json:"sort" gorm:"type:int(4);not null;default:0;comment:'排序'"`icon string `json:"icon" gorm:"type:varchar(50);default:'';comment:'图标'"`ismenu int `json:"is_menu" gorm:"type:tinyint(1);not null;default:1;comment:'是否是菜单项 1 不是 2 是'"`status int `json:"status" gorm:"type:tinyint(1);not null;default:1;comment:'状态:1 启用 0 禁用'"` }

3.我们在config目录下新建config.go文件内容如下:

package configimport ("fmt"_ "github.com/go-sql-driver/mysql""github.com/jinzhu/gorm""gopkg.in/ini.v1""log""myblog/model" )var conf *config //应用配置变量,可以通过它来读取 var db *gorm.db //应用mysql连接池type config struct {appmode stringappport stringmysqluser stringmysqlpwd stringmysqlipport stringmysqldb stringmysqloption string }func init() {initconfig()initdb() //调用同级目录下db.go中的方法gentable() //生成修改表结构 } func initconfig() {cfg, err := ini.load("./config.ini")if err != nil {log.panic("加载ini错误!")}conf = &config{}err = cfg.mapto(conf)if err != nil {log.panic("解析ini文件错误", err)} }func initdb() {var err error//gorm.open("mysql", "user:password@tcp(127.0.0.1:3306)/dbname?charset=utf8&parsetime=true&loc=local")dnsstr := fmt.sprintf("%s:%s@tcp(%s)/%s?%s", conf.mysqluser, conf.mysqlpwd, conf.mysqlipport, conf.mysqldb, conf.mysqloption)db, err = gorm.open("mysql", dnsstr)if err != nil {log.panic("连接mysql有错误:", err)} } func gentable() {db.automigrate(&model.user{})db.automigrate(&model.role{})db.automigrate(&model.node{}) }

config.go文件中生成表结构的关键函数:gentable()

参考链接:http://gincms.com/blog/detail-2.html

总结

以上是尊龙游戏旗舰厅官网为你收集整理的gorm框架:user role用户角色一对一关联model编写的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得尊龙游戏旗舰厅官网网站内容还不错,欢迎将尊龙游戏旗舰厅官网推荐给好友。

网站地图