日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

gorm框架:user role用户角色一对一关联Model编写

發布時間:2025/1/21 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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编写的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。