后台格式规范化 引入casbin做鉴权
This commit is contained in:
@@ -1,61 +0,0 @@
|
||||
package dbModel
|
||||
|
||||
import (
|
||||
"github.com/jinzhu/gorm"
|
||||
"github.com/pkg/errors"
|
||||
"main/controller/servers"
|
||||
"main/init/qmsql"
|
||||
"main/model/modelInterface"
|
||||
)
|
||||
|
||||
type Api struct {
|
||||
gorm.Model
|
||||
Path string `json:"path"`
|
||||
Description string `json:"description"`
|
||||
Group string `json:"group"`
|
||||
}
|
||||
|
||||
func (a *Api) CreateApi() (err error) {
|
||||
findOne := qmsql.DEFAULTDB.Where("path = ?", a.Path).Find(&Menu{}).Error
|
||||
if findOne == nil {
|
||||
return errors.New("存在相同api")
|
||||
} else {
|
||||
err = qmsql.DEFAULTDB.Create(a).Error
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func (a *Api) DeleteApi() (err error) {
|
||||
err = qmsql.DEFAULTDB.Delete(a).Error
|
||||
err = qmsql.DEFAULTDB.Where("api_id = ?", a.ID).Unscoped().Delete(&ApiAuthority{}).Error
|
||||
return err
|
||||
}
|
||||
|
||||
func (a *Api) UpdataApi() (err error) {
|
||||
err = qmsql.DEFAULTDB.Save(a).Error
|
||||
return err
|
||||
}
|
||||
|
||||
func (a *Api) GetApiById(id float64) (err error, api Api) {
|
||||
err = qmsql.DEFAULTDB.Where("id = ?", id).First(&api).Error
|
||||
return
|
||||
}
|
||||
|
||||
// 获取所有api信息
|
||||
func (a *Api) GetAllApis() (err error, apis []Api) {
|
||||
err = qmsql.DEFAULTDB.Find(&apis).Error
|
||||
return
|
||||
}
|
||||
|
||||
// 分页获取数据 需要分页实现这个接口即可
|
||||
func (a *Api) GetInfoList(info modelInterface.PageInfo) (err error, list interface{}, total int) {
|
||||
// 封装分页方法 调用即可 传入 当前的结构体和分页信息
|
||||
err, db, total := servers.PagingServer(a, info)
|
||||
if err != nil {
|
||||
return
|
||||
} else {
|
||||
var apiList []Api
|
||||
err = db.Order("group", true).Where("path LIKE ?", "%"+a.Path+"%").Find(&apiList).Error
|
||||
return err, apiList, total
|
||||
}
|
||||
}
|
||||
@@ -1,36 +0,0 @@
|
||||
package dbModel
|
||||
|
||||
import (
|
||||
"github.com/jinzhu/gorm"
|
||||
"main/init/qmsql"
|
||||
)
|
||||
|
||||
type ApiAuthority struct {
|
||||
gorm.Model
|
||||
AuthorityId string
|
||||
Authority Authority `gorm:"ForeignKey:AuthorityId;AssociationForeignKey:AuthorityId"` //其实没有关联的必要
|
||||
ApiId uint
|
||||
Api Api
|
||||
}
|
||||
|
||||
//创建角色api关联关系
|
||||
func (a *ApiAuthority) SetAuthAndApi(authId string, apisid []uint) (err error) {
|
||||
err = qmsql.DEFAULTDB.Where("authority_id = ?", authId).Unscoped().Delete(&ApiAuthority{}).Error
|
||||
for _, v := range apisid {
|
||||
err = qmsql.DEFAULTDB.Create(&ApiAuthority{AuthorityId: authId, ApiId: v}).Error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// 获取角色api关联关系
|
||||
func (a *ApiAuthority) GetAuthAndApi(authId string) (err error,apiIds []uint) {
|
||||
var apis []ApiAuthority
|
||||
err = qmsql.DEFAULTDB.Where("authority_id = ?", authId).Find(&apis).Error
|
||||
for _, v := range apis {
|
||||
apiIds = append(apiIds,v.ApiId)
|
||||
}
|
||||
return nil,apiIds
|
||||
}
|
||||
@@ -1,18 +0,0 @@
|
||||
package dbModel
|
||||
|
||||
import (
|
||||
"github.com/jinzhu/gorm"
|
||||
"time"
|
||||
)
|
||||
|
||||
//申请model 工作流实例
|
||||
|
||||
type Application struct {
|
||||
gorm.Model
|
||||
WorkFlowID string // 所属工作流ID
|
||||
WorkFlowStepInfoID string // 当前节点ID
|
||||
ApplicationName string // 申请人姓名
|
||||
ApplicationCause string // 请假原因
|
||||
ApplicationStartData time.Time // 请假开始日期
|
||||
ApplicationEndData time.Time // 请假开始日期
|
||||
}
|
||||
@@ -1,47 +0,0 @@
|
||||
package dbModel
|
||||
|
||||
import (
|
||||
"github.com/jinzhu/gorm"
|
||||
"github.com/pkg/errors"
|
||||
"main/controller/servers"
|
||||
"main/init/qmsql"
|
||||
"main/model/modelInterface"
|
||||
)
|
||||
|
||||
type Authority struct {
|
||||
gorm.Model
|
||||
AuthorityId string `json:"authorityId" gorm:"not null;unique"`
|
||||
AuthorityName string `json:"authorityName"`
|
||||
}
|
||||
|
||||
// 创建角色
|
||||
func (a *Authority) CreateAuthority() (err error, authority *Authority) {
|
||||
err = qmsql.DEFAULTDB.Create(a).Error
|
||||
return err, a
|
||||
}
|
||||
|
||||
// 删除角色
|
||||
func (a *Authority) DeleteAuthority() (err error) {
|
||||
err = qmsql.DEFAULTDB.Where("authority_id = ?", a.AuthorityId).Find(&User{}).Error
|
||||
if err != nil {
|
||||
err = qmsql.DEFAULTDB.Where("authority_id = ?", a.AuthorityId).Delete(a).Error
|
||||
} else {
|
||||
err = errors.New("此角色有用户正在使用禁止删除")
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
|
||||
|
||||
// 分页获取数据 需要分页实现这个接口即可
|
||||
func (a *Authority) GetInfoList(info modelInterface.PageInfo) (err error, list interface{}, total int) {
|
||||
// 封装分页方法 调用即可 传入 当前的结构体和分页信息
|
||||
err, db, total := servers.PagingServer(a, info)
|
||||
if err != nil {
|
||||
return
|
||||
} else {
|
||||
var authority []Authority
|
||||
err = db.Find(&authority).Error
|
||||
return err, authority, total
|
||||
}
|
||||
}
|
||||
@@ -1,94 +0,0 @@
|
||||
package dbModel
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"github.com/jinzhu/gorm"
|
||||
"github.com/pkg/errors"
|
||||
"main/controller/servers"
|
||||
"main/init/qmsql"
|
||||
"main/model/modelInterface"
|
||||
)
|
||||
|
||||
type BaseMenu struct {
|
||||
gorm.Model
|
||||
MenuLevel uint `json:"-"`
|
||||
ParentId string `json:"parentId"`
|
||||
Path string `json:"path"`
|
||||
Name string `json:"name"`
|
||||
Hidden bool `json:"hidden"`
|
||||
Component string `json:"component"`
|
||||
Meta `json:"meta"`
|
||||
NickName string `json:"nickName"`
|
||||
Children []BaseMenu `json:"children"`
|
||||
}
|
||||
|
||||
func (b *BaseMenu) AddBaseMenu() (err error) {
|
||||
findOne := qmsql.DEFAULTDB.Where("name = ?", b.Name).Find(&BaseMenu{}).Error
|
||||
if findOne != nil {
|
||||
b.NickName = b.Title
|
||||
err = qmsql.DEFAULTDB.Create(b).Error
|
||||
} else {
|
||||
err = errors.New("存在重复name,请修改name")
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func (b *BaseMenu) DeleteBaseMenu(id float64) (err error) {
|
||||
err = qmsql.DEFAULTDB.Where("parent_id = ?", id).First(&BaseMenu{}).Error
|
||||
if err != nil {
|
||||
err = qmsql.DEFAULTDB.Where("id = ?", id).Delete(&b).Error
|
||||
err = qmsql.DEFAULTDB.Where("menu_id = ?", id).Unscoped().Delete(&Menu{}).Error
|
||||
} else {
|
||||
return errors.New("此菜单存在子菜单不可删除")
|
||||
}
|
||||
return err
|
||||
}
|
||||
|
||||
func (b *BaseMenu) UpdataBaseMenu() (err error) {
|
||||
upDataMap := make(map[string]interface{})
|
||||
upDataMap["parent_id"] = b.ParentId
|
||||
upDataMap["path"] = b.Path
|
||||
upDataMap["name"] = b.Name
|
||||
upDataMap["hidden"] = b.Hidden
|
||||
upDataMap["component"] = b.Component
|
||||
upDataMap["title"] = b.Title
|
||||
upDataMap["icon"] = b.Icon
|
||||
err = qmsql.DEFAULTDB.Where("id = ?", b.ID).Find(&BaseMenu{}).Updates(upDataMap).Error
|
||||
err1 := qmsql.DEFAULTDB.Where("menu_id = ?", b.ID).Find(&[]Menu{}).Updates(upDataMap).Error
|
||||
fmt.Printf("菜单修改时候,关联菜单err:%v", err1)
|
||||
return err
|
||||
}
|
||||
|
||||
func (b *BaseMenu) GetBaseMenuById(id float64) (err error, menu BaseMenu) {
|
||||
err = qmsql.DEFAULTDB.Where("id = ?", id).First(&menu).Error
|
||||
return
|
||||
}
|
||||
|
||||
func (b *BaseMenu) GetInfoList(info modelInterface.PageInfo) (err error, list interface{}, total int) {
|
||||
// 封装分页方法 调用即可 传入 当前的结构体和分页信息
|
||||
err, db, total := servers.PagingServer(b, info)
|
||||
if err != nil {
|
||||
return
|
||||
} else {
|
||||
var menuList []BaseMenu
|
||||
err = db.Find(&menuList).Error
|
||||
return err, menuList, total
|
||||
}
|
||||
}
|
||||
|
||||
//获取基础路由树
|
||||
func (m *BaseMenu) GetBaseMenuTree() (err error, menus []BaseMenu) {
|
||||
err = qmsql.DEFAULTDB.Where(" parent_id = ?", 0).Find(&menus).Error
|
||||
for i := 0; i < len(menus); i++ {
|
||||
err = getBaseChildrenList(&menus[i])
|
||||
}
|
||||
return err, menus
|
||||
}
|
||||
|
||||
func getBaseChildrenList(menu *BaseMenu) (err error) {
|
||||
err = qmsql.DEFAULTDB.Where("parent_id = ?", menu.ID).Find(&menu.Children).Error
|
||||
for i := 0; i < len(menu.Children); i++ {
|
||||
err = getBaseChildrenList(&menu.Children[i])
|
||||
}
|
||||
return err
|
||||
}
|
||||
+7
-7
@@ -7,7 +7,7 @@ import (
|
||||
"main/model/modelInterface"
|
||||
)
|
||||
|
||||
type FileUploadAndDownload struct {
|
||||
type ExaFileUploadAndDownload struct {
|
||||
gorm.Model
|
||||
Name string `json:"name"`
|
||||
Url string `json:"url"`
|
||||
@@ -15,30 +15,30 @@ type FileUploadAndDownload struct {
|
||||
Key string `json:"key"`
|
||||
}
|
||||
|
||||
func (f *FileUploadAndDownload) Upload() error {
|
||||
func (f *ExaFileUploadAndDownload) Upload() error {
|
||||
err := qmsql.DEFAULTDB.Create(f).Error
|
||||
return err
|
||||
}
|
||||
|
||||
func (f *FileUploadAndDownload) DeleteFile() error {
|
||||
func (f *ExaFileUploadAndDownload) DeleteFile() error {
|
||||
err := qmsql.DEFAULTDB.Where("id = ?", f.ID).Delete(f).Error
|
||||
return err
|
||||
}
|
||||
|
||||
func (f *FileUploadAndDownload) FindFile() (error, FileUploadAndDownload) {
|
||||
var file FileUploadAndDownload
|
||||
func (f *ExaFileUploadAndDownload) FindFile() (error, ExaFileUploadAndDownload) {
|
||||
var file ExaFileUploadAndDownload
|
||||
err := qmsql.DEFAULTDB.Where("id = ?", f.ID).First(&file).Error
|
||||
return err, file
|
||||
}
|
||||
|
||||
// 分页获取数据 需要分页实现这个接口即可
|
||||
func (f *FileUploadAndDownload) GetInfoList(info modelInterface.PageInfo) (err error, list interface{}, total int) {
|
||||
func (f *ExaFileUploadAndDownload) GetInfoList(info modelInterface.PageInfo) (err error, list interface{}, total int) {
|
||||
// 封装分页方法 调用即可 传入 当前的结构体和分页信息
|
||||
err, db, total := servers.PagingServer(f, info)
|
||||
if err != nil {
|
||||
return
|
||||
} else {
|
||||
var fileLists []FileUploadAndDownload
|
||||
var fileLists []ExaFileUploadAndDownload
|
||||
err = db.Order("updated_at desc").Find(&fileLists).Error
|
||||
return err, fileLists, total
|
||||
}
|
||||
@@ -1 +0,0 @@
|
||||
package dbModel
|
||||
@@ -1,59 +0,0 @@
|
||||
package dbModel
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"main/init/qmsql"
|
||||
)
|
||||
|
||||
// menu需要构建的点有点多 这里关联关系表直接把所有数据拿过来 用代码实现关联 后期实现主外键模式
|
||||
type Menu struct {
|
||||
BaseMenu
|
||||
MenuId string `json:"menuId"`
|
||||
AuthorityId string `json:"-"`
|
||||
Children []Menu `json:"children"`
|
||||
}
|
||||
|
||||
type Meta struct {
|
||||
Title string `json:"title"`
|
||||
Icon string `json:"icon"`
|
||||
}
|
||||
|
||||
// 为角色增加menu树
|
||||
func (m *Menu) AddMenuAuthority(menus []BaseMenu, authorityId string) (err error) {
|
||||
var menu Menu
|
||||
qmsql.DEFAULTDB.Where("authority_id = ? ", authorityId).Unscoped().Delete(&Menu{})
|
||||
for _, v := range menus {
|
||||
menu.BaseMenu = v
|
||||
menu.AuthorityId = authorityId
|
||||
menu.MenuId = fmt.Sprintf("%v", v.ID)
|
||||
menu.ID = 0
|
||||
err = qmsql.DEFAULTDB.Create(&menu).Error
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// 查看当前角色树
|
||||
func (m *Menu) GetMenuAuthority(authorityId string) (err error, menus []Menu) {
|
||||
err = qmsql.DEFAULTDB.Where("authority_id = ?", authorityId).Find(&menus).Error
|
||||
return err, menus
|
||||
}
|
||||
|
||||
//获取动态路由树
|
||||
func (m *Menu) GetMenuTree(authorityId string) (err error, menus []Menu) {
|
||||
err = qmsql.DEFAULTDB.Where("authority_id = ? AND parent_id = ?", authorityId, 0).Find(&menus).Error
|
||||
for i := 0; i < len(menus); i++ {
|
||||
err = getChildrenList(&menus[i])
|
||||
}
|
||||
return err, menus
|
||||
}
|
||||
|
||||
func getChildrenList(menu *Menu) (err error) {
|
||||
err = qmsql.DEFAULTDB.Where("authority_id = ? AND parent_id = ?", menu.AuthorityId, menu.MenuId).Find(&menu.Children).Error
|
||||
for i := 0; i < len(menu.Children); i++ {
|
||||
err = getChildrenList(&menu.Children[i])
|
||||
}
|
||||
return err
|
||||
}
|
||||
@@ -1,89 +0,0 @@
|
||||
package dbModel
|
||||
|
||||
import (
|
||||
"github.com/jinzhu/gorm"
|
||||
"github.com/pkg/errors"
|
||||
uuid "github.com/satori/go.uuid"
|
||||
"main/controller/servers"
|
||||
"main/init/qmsql"
|
||||
"main/model/modelInterface"
|
||||
"main/tools"
|
||||
)
|
||||
|
||||
type User struct {
|
||||
gorm.Model
|
||||
UUID uuid.UUID `json:"uuid"`
|
||||
Username string `json:"userName"`
|
||||
Password string `json:"-"`
|
||||
NickName string `json:"nickName" gorm:"default:'QMPlusUser'"`
|
||||
HeaderImg string `json:"headerImg" gorm:"default:'http://www.henrongyi.top/avatar/lufu.jpg'"`
|
||||
Authority Authority `json:"authority" gorm:"ForeignKey:AuthorityId;AssociationForeignKey:AuthorityId"`
|
||||
AuthorityId string `json:"-" gorm:"default:888"`
|
||||
//Propertie // 多余属性自行添加
|
||||
//PropertieId uint // 自动关联 Propertie 的Id 附加属性过多 建议创建一对一关系
|
||||
}
|
||||
|
||||
//type Propertie struct {
|
||||
// gorm.Model
|
||||
//}
|
||||
|
||||
//注册接口model方法
|
||||
func (u *User) Regist() (err error, userInter *User) {
|
||||
var user User
|
||||
//判断用户名是否注册
|
||||
findErr := qmsql.DEFAULTDB.Where("username = ?", u.Username).First(&user).Error
|
||||
//err为nil表明读取到了 不能注册
|
||||
if findErr == nil {
|
||||
return errors.New("用户名已注册"), nil
|
||||
} else {
|
||||
// 否则 附加uuid 密码md5简单加密 注册
|
||||
u.Password = tools.MD5V(u.Password)
|
||||
u.UUID = uuid.NewV4()
|
||||
err = qmsql.DEFAULTDB.Create(u).Error
|
||||
}
|
||||
return err, u
|
||||
}
|
||||
|
||||
//修改用户密码
|
||||
func (u *User) ChangePassword(newPassword string) (err error, userInter *User) {
|
||||
var user User
|
||||
//后期修改jwt+password模式
|
||||
u.Password = tools.MD5V(u.Password)
|
||||
err = qmsql.DEFAULTDB.Where("username = ? AND password = ?", u.Username, u.Password).First(&user).Update("password", tools.MD5V(newPassword)).Error
|
||||
return err, u
|
||||
}
|
||||
|
||||
//用户更新接口
|
||||
func (u *User) SetUserAuthority(uuid uuid.UUID, AuthorityId string) (err error) {
|
||||
err = qmsql.DEFAULTDB.Where("uuid = ?", uuid).First(&User{}).Update("authority_id", AuthorityId).Error
|
||||
return err
|
||||
}
|
||||
|
||||
//用户登录
|
||||
func (u *User) Login() (err error, userInter *User) {
|
||||
var user User
|
||||
u.Password = tools.MD5V(u.Password)
|
||||
err = qmsql.DEFAULTDB.Where("username = ? AND password = ?", u.Username, u.Password).First(&user).Error
|
||||
err = qmsql.DEFAULTDB.Where("authority_id = ?", user.AuthorityId).First(&user.Authority).Error
|
||||
return err, &user
|
||||
}
|
||||
|
||||
// 用户头像上传更新地址
|
||||
func (u *User) UploadHeaderImg(uuid uuid.UUID, filePath string) (err error, userInter *User) {
|
||||
var user User
|
||||
err = qmsql.DEFAULTDB.Where("uuid = ?", uuid).First(&user).Update("header_img", filePath).First(&user).Error
|
||||
return err, &user
|
||||
}
|
||||
|
||||
// 分页获取数据 需要分页实现这个接口即可
|
||||
func (u *User) GetInfoList(info modelInterface.PageInfo) (err error, list interface{}, total int) {
|
||||
// 封装分页方法 调用即可 传入 当前的结构体和分页信息
|
||||
err, db, total := servers.PagingServer(u, info)
|
||||
if err != nil {
|
||||
return
|
||||
} else {
|
||||
var userList []User
|
||||
err = db.Preload("Authority").Find(&userList).Error
|
||||
return err, userList, total
|
||||
}
|
||||
}
|
||||
@@ -1,32 +0,0 @@
|
||||
package dbModel
|
||||
|
||||
import (
|
||||
"github.com/jinzhu/gorm"
|
||||
"main/init/qmsql"
|
||||
)
|
||||
|
||||
//工作流属性表
|
||||
type Workflow struct {
|
||||
gorm.Model
|
||||
WorkflowNickName string `json:"workflowNickName"` // 工作流名称
|
||||
WorkflowName string `json:"workflowName"` // 工作流英文id
|
||||
WorkflowDescription string `json:"workflowDescription"` // 工作流描述
|
||||
WorkflowStep []WorkflowStepInfo `json:"workflowStep"` // 工作流步骤
|
||||
}
|
||||
|
||||
// 工作流状态表
|
||||
type WorkflowStepInfo struct {
|
||||
gorm.Model
|
||||
WorkflowID uint `json:"workflowID"` // 所属工作流ID
|
||||
IsStrat bool `json:"isStrat"` // 是否是开始流节点
|
||||
StepName string `json:"stepName"` // 工作流名称
|
||||
StepNo float64 `json:"stepNo"` // 步骤id (第几步)
|
||||
StepAuthorityID string `json:"stepAuthorityID"` // 操作者级别id
|
||||
IsEnd bool `json:"isEnd"` // 是否是完结流节点
|
||||
}
|
||||
|
||||
//创建工作流
|
||||
func (wk *Workflow) Create() error {
|
||||
err := qmsql.DEFAULTDB.Create(&wk).Error
|
||||
return err
|
||||
}
|
||||
@@ -1,14 +0,0 @@
|
||||
package dbModel
|
||||
|
||||
import "github.com/jinzhu/gorm"
|
||||
|
||||
// 工作流流转表
|
||||
type WorkFlowProcess struct {
|
||||
gorm.Model
|
||||
ApplicationID uint // 当前工作流所属申请的ID
|
||||
CurrentNode string // 当前进度节点
|
||||
HistoricalNode string //上一个进度节点
|
||||
CurrentUser string // 当前进度操作人
|
||||
HistoricalUser string // 上一个进度的操作人
|
||||
State bool // 状态 是否是正在进行的状态
|
||||
}
|
||||
Reference in New Issue
Block a user