Skip to content

Commit 367b31a

Browse files
committed
feat(database): add CsAcademicAffairsPermission model and user setup logic
1 parent 7de462a commit 367b31a

11 files changed

Lines changed: 259 additions & 12 deletions

database/database.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,11 @@ func NewDatabaseOperate(config *toml.Tree) *DbOperate {
5959
}
6060
}
6161

62+
// GetDatabase 获取数据库连接对象
63+
func (db *DbOperate) GetDatabase() *gorm.DB {
64+
return db.database
65+
}
66+
6267
// DbOperate 数据库操作对象
6368
type DbOperate struct {
6469
database *gorm.DB

go.mod

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,8 @@ require (
99
github.com/jinzhu/inflection v1.0.0 // indirect
1010
github.com/jinzhu/now v1.1.5 // indirect
1111
github.com/pelletier/go-toml v1.9.5 // indirect
12-
golang.org/x/text v0.21.0 // indirect
12+
golang.org/x/crypto v0.36.0 // indirect
13+
golang.org/x/text v0.23.0 // indirect
1314
gorm.io/driver/mysql v1.5.7 // indirect
1415
gorm.io/gorm v1.25.12 // indirect
1516
)

go.sum

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,12 @@ github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
1111
github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
1212
github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8=
1313
github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c=
14+
golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34=
15+
golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc=
1416
golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
1517
golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
18+
golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=
19+
golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=
1620
gorm.io/driver/mysql v1.5.7 h1:MndhOPYOfEp2rHKgkZIhJ16eVUIRf2HmzgoPmh7FCWo=
1721
gorm.io/driver/mysql v1.5.7/go.mod h1:sEtPWMiqiN1N1cMXoXmBbd8C6/l+TESwriotuRRpkDM=
1822
gorm.io/gorm v1.25.7/go.mod h1:hbnx/Oo0ChWMn1BIhpy1oYozzpM15i4YPuHDmfYtwg8=
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
/*
2+
* --------------------------------------------------------------------------------
3+
* Copyright (c) 2022-NOW(至今) 锋楪技术团队
4+
* Author: 锋楪技术团队 (https://www.frontleaves.com)
5+
*
6+
* 本文件包含锋楪技术团队项目的源代码,项目的所有源代码均遵循 MIT 开源许可证协议。
7+
* --------------------------------------------------------------------------------
8+
* 许可证声明:
9+
*
10+
* 版权所有 (c) 2022-2025 锋楪技术团队。保留所有权利。
11+
*
12+
* 本软件是“按原样”提供的,没有任何形式的明示或暗示的保证,包括但不限于
13+
* 对适销性、特定用途的适用性和非侵权性的暗示保证。在任何情况下,
14+
* 作者或版权持有人均不承担因软件或软件的使用或其他交易而产生的、
15+
* 由此引起的或以任何方式与此软件有关的任何索赔、损害或其他责任。
16+
*
17+
* 使用本软件即表示您了解此声明并同意其条款。
18+
*
19+
* 有关 MIT 许可证的更多信息,请查看项目根目录下的 LICENSE 文件或访问:
20+
* https://opensource.org/licenses/MIT
21+
* --------------------------------------------------------------------------------
22+
* 免责声明:
23+
*
24+
* 使用本软件的风险由用户自担。作者或版权持有人在法律允许的最大范围内,
25+
* 对因使用本软件内容而导致的任何直接或间接的损失不承担任何责任。
26+
* --------------------------------------------------------------------------------
27+
*/
28+
29+
package do
30+
31+
import (
32+
"time"
33+
)
34+
35+
// CsAcademicAffairsPermission 教务权限表
36+
type CsAcademicAffairsPermission struct {
37+
AcademicAffairsPermissionUUID string `gorm:"column:academic_affairs_permission_uuid;type:char(32);primaryKey;comment:教务权限主键" json:"academic_affairs_permission_uuid"`
38+
AuthorizedUser string `gorm:"column:authorized_user;type:char(32);not null;comment:授权用户" json:"authorized_user"`
39+
Department string `gorm:"column:department;type:char(32);not null;comment:部门(要求该部门为院系)" json:"department"`
40+
Type int8 `gorm:"column:type;type:tinyint;not null;comment:类型 0:所有权限, 1:教务权限..." json:"type"`
41+
CreatedAt time.Time `gorm:"column:created_at;type:timestamp;not null;default:CURRENT_TIMESTAMP;comment:创建时间" json:"created_at"`
42+
UpdatedAt time.Time `gorm:"column:updated_at;type:timestamp;not null;default:CURRENT_TIMESTAMP;comment:更新时间" json:"updated_at"`
43+
44+
// 外键关联
45+
User *CsUser `gorm:"foreignKey:AuthorizedUser;references:UserUUID" json:"user,omitempty"`
46+
CsDepartment *CsDepartment `gorm:"foreignKey:Department;references:DepartmentUUID" json:"department_info,omitempty"`
47+
}
48+
49+
// TableName 指定表名
50+
func (CsAcademicAffairsPermission) TableName() string {
51+
return "cs_academic_affairs_permission"
52+
}

models/do/user_entity.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -39,14 +39,13 @@ type CsUser struct {
3939
Password string `gorm:"column:password;type:char(60);not null" json:"-"` // 用户密码
4040
Email string `gorm:"column:email;type:varchar(255);not null;uniqueIndex:uk_user_email" json:"email"` // 用户邮箱
4141
Phone string `gorm:"column:phone;type:varchar(11);not null;uniqueIndex:uk_user_phone" json:"phone"` // 用户手机号
42-
Status bool `gorm:"column:status;type:tinyint(1);not null;default:1;index:idx_user_status" json:"status"` // 用户状态 0:禁用 1:启用
43-
Ban bool `gorm:"column:ban;type:tinyint(1);not null;default:0;index:idx_user_ban" json:"ban"` // 用户是否被封禁 0:未封禁 1:已封禁
42+
Status *bool `gorm:"column:status;type:tinyint(1);not null;default:1;index:idx_user_status" json:"status"` // 用户状态 0:禁用 1:启用
43+
Ban *bool `gorm:"column:ban;type:tinyint(1);not null;default:0;index:idx_user_ban" json:"ban"` // 用户是否被封禁 0:未封禁 1:已封禁
4444
RoleUUID string `gorm:"column:role_uuid;type:char(32);not null;index:idx_user_role_uuid" json:"role_uuid"` // 角色UUID
45-
Permission string `gorm:"column:permission;type:json" json:"permission"` // 用户权限
45+
Permission *string `gorm:"column:permission;type:json" json:"permission"` // 用户权限
4646
CreatedAt time.Time `gorm:"column:created_at;type:timestamp;not null;default:CURRENT_TIMESTAMP" json:"created_at"` // 创建时间
4747
UpdatedAt time.Time `gorm:"column:updated_at;type:timestamp;not null;default:CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP" json:"updated_at"` // 更新时间
4848

49-
// 外键关联
5049
Role CsRole `gorm:"foreignKey:RoleUUID;references:RoleUUID;constraint:OnUpdate:CASCADE" json:"role"` // 关联角色
5150
}
5251

services/database_init.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,4 +52,5 @@ func InitDatabase(config *toml.Tree, resourcesFile embed.FS) {
5252
setupData.OperateSetupGrade()
5353
setupData.OperateSetupAdministrativeClass()
5454
setupData.OperateSetupTeacherAndStudent()
55+
setupData.OperateSetupUser()
5556
}

services/setup/setup_administrative_class.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -32,16 +32,17 @@ func (is *InitStruct) OperateSetupAdministrativeClass() {
3232
// 畜禽智能化养殖专业
3333
is.operate.InitAdministrativeClass("现代农业学院", "畜禽智能化养殖", "CC100001", "畜智1班", "2022", 39, nil)
3434
is.operate.InitAdministrativeClass("现代农业学院", "畜禽智能化养殖", "CC100002", "畜智2班", "2022", 20, nil)
35+
is.operate.InitAdministrativeClass("现代农业学院", "畜禽智能化养殖", "CC100003", "畜智3班", "2022", 20, nil)
3536

3637
// 棉花加工与经营管理专业
37-
is.operate.InitAdministrativeClass("现代农业学院", "棉花加工与经营管理", "CC100003", "棉经1班", "2022", 39, nil)
38-
is.operate.InitAdministrativeClass("现代农业学院", "棉花加工与经营管理", "CC100004", "棉经2班", "2022", 16, nil)
39-
is.operate.InitAdministrativeClass("现代农业学院", "棉花加工与经营管理", "CC100005", "棉经3班", "2022", 42, nil)
38+
is.operate.InitAdministrativeClass("现代农业学院", "棉花加工与经营管理", "CC100004", "棉经1班", "2022", 39, nil)
39+
is.operate.InitAdministrativeClass("现代农业学院", "棉花加工与经营管理", "CC100005", "棉经2班", "2022", 16, nil)
40+
is.operate.InitAdministrativeClass("现代农业学院", "棉花加工与经营管理", "CC100006", "棉经3班", "2022", 42, nil)
4041

4142
// 现代农业经济管理
42-
is.operate.InitAdministrativeClass("现代农业学院", "现代农业经济管理", "CC100006", "农经1班", "2022", 15, nil)
43-
is.operate.InitAdministrativeClass("现代农业学院", "现代农业经济管理", "CC100007", "农经2班", "2022", 18, nil)
43+
is.operate.InitAdministrativeClass("现代农业学院", "现代农业经济管理", "CC100007", "农经1班", "2022", 15, nil)
44+
is.operate.InitAdministrativeClass("现代农业学院", "现代农业经济管理", "CC100008", "农经2班", "2022", 18, nil)
4445

4546
// 畜牧兽医
46-
is.operate.InitAdministrativeClass("现代农业学院", "畜牧兽医", "CC100008", "畜兽1班", "2022", 42, nil)
47+
is.operate.InitAdministrativeClass("现代农业学院", "畜牧兽医", "CC100009", "畜兽1班", "2022", 42, nil)
4748
}

services/setup/setup_ordinary.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,7 +202,7 @@ func (is *InitStruct) OperateSetupOrdinary() {
202202
"operate",
203203
"user",
204204
})
205-
is.operate.InitRoleData("老师", nil)
205+
is.operate.InitRoleData("教师", nil)
206206
is.operate.InitRoleData("学生", nil)
207207
is.operate.InitRoleData("教务", nil)
208208
is.operate.InitRoleData("管理", nil)

services/setup/setup_teachers_and_students.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,11 @@ func (is *InitStruct) OperateSetupTeacherAndStudent() {
3838
is.operate.InitTeacherData("赵六", "Zhao Liu", "T004", "汉族", true, "教授", "教育艺术学院")
3939
is.operate.InitTeacherData("孙七", "Sun Qi", "T005", "汉族", true, "教授", "教育艺术学院")
4040
is.operate.InitTeacherData("周八", "Zhou Ba", "T006", "汉族", true, "讲师", "教育艺术学院")
41+
is.operate.InitTeacherData("测试教师", " Test Teacher", "T10000", "汉族", true, "教授", "现代农业学院")
4142

4243
// 初始化学生数据
44+
is.operate.InitStudentData("筱锋", "CC10000", "2022", "现代农业学院", "畜禽智能化养殖", "畜智3班", true)
45+
4346
// 畜智1班 39名学生
4447
for i := 1; i <= 39; i++ {
4548
is.operate.InitStudentData(

services/setup/setup_user.go

Lines changed: 160 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,160 @@
1+
/*
2+
* --------------------------------------------------------------------------------
3+
* Copyright (c) 2022-NOW(至今) 锋楪技术团队
4+
* Author: 锋楪技术团队 (https://www.frontleaves.com)
5+
*
6+
* 本文件包含锋楪技术团队项目的源代码,项目的所有源代码均遵循 MIT 开源许可证协议。
7+
* --------------------------------------------------------------------------------
8+
* 许可证声明:
9+
*
10+
* 版权所有 (c) 2022-2025 锋楪技术团队。保留所有权利。
11+
*
12+
* 本软件是“按原样”提供的,没有任何形式的明示或暗示的保证,包括但不限于
13+
* 对适销性、特定用途的适用性和非侵权性的暗示保证。在任何情况下,
14+
* 作者或版权持有人均不承担因软件或软件的使用或其他交易而产生的、
15+
* 由此引起的或以任何方式与此软件有关的任何索赔、损害或其他责任。
16+
*
17+
* 使用本软件即表示您了解此声明并同意其条款。
18+
*
19+
* 有关 MIT 许可证的更多信息,请查看项目根目录下的 LICENSE 文件或访问:
20+
* https://opensource.org/licenses/MIT
21+
* --------------------------------------------------------------------------------
22+
* 免责声明:
23+
*
24+
* 使用本软件的风险由用户自担。作者或版权持有人在法律允许的最大范围内,
25+
* 对因使用本软件内容而导致的任何直接或间接的损失不承担任何责任。
26+
* --------------------------------------------------------------------------------
27+
*/
28+
29+
package setup
30+
31+
import (
32+
"fmt"
33+
"frontleaves-table-install-cli/models/do"
34+
"frontleaves-table-install-cli/utils"
35+
"time"
36+
)
37+
38+
// OperateSetupUser 创建一些测试用户
39+
func (is *InitStruct) OperateSetupUser() {
40+
41+
// 创建一个管理员测试用户
42+
var getRoleAdmin = do.CsRole{}
43+
is.operate.GetDatabase().Where("role_name = '管理员'").First(&getRoleAdmin)
44+
var newAdminUser = do.CsUser{
45+
UserUUID: utils.GenerateUUIDNoDash(),
46+
Name: "test_admin",
47+
Password: utils.Encrypt("admin"),
48+
Email: "admin@x-lf.cn",
49+
Phone: "18888888880",
50+
RoleUUID: getRoleAdmin.RoleUUID,
51+
Permission: utils.Ptr("[]"),
52+
CreatedAt: time.Now(),
53+
UpdatedAt: time.Now(),
54+
}
55+
tx := is.operate.GetDatabase().Create(&newAdminUser)
56+
if tx.Error != nil {
57+
panic(tx.Error)
58+
}
59+
fmt.Println("初始化 测试用户[管理员] 成功")
60+
61+
// 创建一个管理用户
62+
var getRoleManager = do.CsRole{}
63+
is.operate.GetDatabase().Where("role_name = '管理'").First(&getRoleManager)
64+
var newManagerUser = do.CsUser{
65+
UserUUID: utils.GenerateUUIDNoDash(),
66+
Name: "test_manager",
67+
Password: utils.Encrypt("manager"),
68+
Email: "manager@x-lf.cn",
69+
Phone: "18888888881",
70+
RoleUUID: getRoleAdmin.RoleUUID,
71+
Permission: utils.Ptr("[]"),
72+
CreatedAt: time.Now(),
73+
UpdatedAt: time.Now(),
74+
}
75+
tx = is.operate.GetDatabase().Create(&newManagerUser)
76+
if tx.Error != nil {
77+
panic(tx.Error)
78+
}
79+
fmt.Println("初始化 测试用户[管理] 成功")
80+
81+
// 创建一个教务用户
82+
var getRoleAcademic = do.CsRole{}
83+
is.operate.GetDatabase().Where("role_name = '教务'").First(&getRoleAcademic)
84+
var getNewAcademicUserUUID = utils.GenerateUUIDNoDash()
85+
var newAcademicUser = do.CsUser{
86+
UserUUID: getNewAcademicUserUUID,
87+
Name: "test_academic",
88+
Password: utils.Encrypt("academic"),
89+
Email: "academic@x-lf.cn",
90+
Phone: "18888888882",
91+
RoleUUID: getRoleAcademic.RoleUUID,
92+
Permission: utils.Ptr("[]"),
93+
CreatedAt: time.Now(),
94+
UpdatedAt: time.Now(),
95+
}
96+
is.operate.GetDatabase().Create(&newAcademicUser)
97+
var getDepartment = do.CsDepartment{}
98+
is.operate.GetDatabase().Where("department_name = '现代农业学院'").First(&getDepartment)
99+
var newAcademicAffairsPermission = do.CsAcademicAffairsPermission{
100+
AcademicAffairsPermissionUUID: utils.GenerateUUIDNoDash(),
101+
AuthorizedUser: getNewAcademicUserUUID,
102+
Department: getDepartment.DepartmentUUID,
103+
Type: 0,
104+
CreatedAt: time.Now(),
105+
UpdatedAt: time.Now(),
106+
}
107+
tx = is.operate.GetDatabase().Create(&newAcademicAffairsPermission)
108+
if tx.Error != nil {
109+
panic(tx.Error)
110+
}
111+
fmt.Println("初始化 测试用户[教务] 成功")
112+
113+
// 创建一个教师用户
114+
var getRoleTeacher = do.CsRole{}
115+
is.operate.GetDatabase().Where("role_name = '教师'").First(&getRoleTeacher)
116+
var getTeacher = do.CsTeacher{}
117+
is.operate.GetDatabase().Where("name = '测试教师'").First(&getTeacher)
118+
getTeacher.UserUUID = utils.Ptr(utils.GenerateUUIDNoDash())
119+
var newTeacherUser = do.CsUser{
120+
UserUUID: *getTeacher.UserUUID,
121+
Name: "test_teacher",
122+
Password: utils.Encrypt("teacher"),
123+
Email: "teacher@x-lf.cn",
124+
Phone: "18888888883",
125+
RoleUUID: getRoleAcademic.RoleUUID,
126+
Permission: utils.Ptr("[]"),
127+
CreatedAt: time.Now(),
128+
UpdatedAt: time.Now(),
129+
}
130+
tx = is.operate.GetDatabase().Create(&newTeacherUser)
131+
if tx.Error != nil {
132+
panic(tx.Error)
133+
}
134+
is.operate.GetDatabase().Save(&getTeacher)
135+
fmt.Println("初始化 测试用户[教师] 成功")
136+
137+
// 创建一个学生用户
138+
var getRoleStudent = do.CsRole{}
139+
is.operate.GetDatabase().Where("role_name = '学生'").First(&getRoleStudent)
140+
var getStudent = do.CsStudent{}
141+
is.operate.GetDatabase().Where("name = '筱锋'").First(&getStudent)
142+
getStudent.UserUUID = utils.Ptr(utils.GenerateUUIDNoDash())
143+
var newStudentUser = do.CsUser{
144+
UserUUID: *getStudent.UserUUID,
145+
Name: "test_student",
146+
Password: utils.Encrypt("student"),
147+
Email: "student@x-lf.cn",
148+
Phone: "18888888884",
149+
Permission: utils.Ptr("[]"),
150+
RoleUUID: getRoleStudent.RoleUUID,
151+
CreatedAt: time.Now(),
152+
UpdatedAt: time.Now(),
153+
}
154+
tx = is.operate.GetDatabase().Create(&newStudentUser)
155+
if tx.Error != nil {
156+
panic(tx.Error)
157+
}
158+
is.operate.GetDatabase().Save(&getStudent)
159+
fmt.Println("初始化 测试用户[学生] 成功")
160+
}

0 commit comments

Comments
 (0)