update: used gormv2 to handle permission process

This commit is contained in:
zhangwenjian
2020-08-29 23:25:53 +08:00
parent d53ba4ed7a
commit 671291d024
10 changed files with 64 additions and 55 deletions
+2 -2
View File
@@ -43,7 +43,7 @@ func GetSysJob(c *gin.Context) {
var v tools.GeneralGetDto
err := c.BindUri(&v)
tools.HasError(err, "", 500)
data.JobId, _ = tools.StringToInt(v.Id)
data.JobId = v.Id
err = data.Get(data.JobId)
tools.HasError(err, "抱歉未找到相关信息", -1)
@@ -111,7 +111,7 @@ func StartJob(c *gin.Context) {
var v tools.GeneralGetDto
err := c.BindUri(&v)
tools.HasError(err, "", 500)
data.JobId, _ = tools.StringToInt(v.Id)
data.JobId = v.Id
err = data.Get(data.JobId)
tools.HasError(err, "", 500)
if data.JobType == 1 {
+1 -6
View File
@@ -44,12 +44,7 @@ func GetDictTypeList(c *gin.Context) {
result, count, err := data.GetPage(pageSize, pageIndex)
tools.HasError(err, "", -1)
var res app.PageResponse
res.Data.List = result
res.Data.Count = count
res.Data.PageIndex = pageIndex
res.Data.PageSize = pageSize
c.JSON(http.StatusOK, res.ReturnOK())
app.PageOK(c,result,count,pageIndex,pageSize,"")
}
// @Summary 通过字典id获取字典类型
-1
View File
@@ -53,4 +53,3 @@ settings:
dbname: dbname
# 代码生成是使用前端代码存放位置,需要指定到src文件夹,相对路径
frontpath: ../go-admin-ui/src
>>>>>>> c396f318ef0649f7231b8ee7b2a70d26159c19c2
+32
View File
@@ -51,3 +51,35 @@ func (e *DataPermission) GetDataScope(tbname string, table *gorm.DB) (*gorm.DB,
return table, nil
}
func DataScopes(tableName string, userid int) func(db *gorm.DB) *gorm.DB {
return func(db *gorm.DB) *gorm.DB {
SysUser := new(SysUser)
SysRole := new(SysRole)
SysUser.UserId = userid
user, err := SysUser.Get()
if err != nil {
db.Error = errors.New("获取用户数据出错 msg:" + err.Error())
return db
}
SysRole.RoleId = user.RoleId
role, err := SysRole.Get()
if err != nil {
db.Error = errors.New("获取用户数据出错 msg:" + err.Error())
return db
}
if role.DataScope == "2" {
return db.Where(tableName+".create_by in (select sys_user.user_id from sys_role_dept left join sys_user on sys_user.dept_id=sys_role_dept.dept_id where sys_role_dept.role_id = ?)", user.RoleId)
}
if role.DataScope == "3" {
return db.Where(tableName+".create_by in (SELECT user_id from sys_user where dept_id = ? )", user.DeptId)
}
if role.DataScope == "4" {
return db.Where(tableName+".create_by in (SELECT user_id from sys_user where sys_user.dept_id in(select dept_id from sys_dept where dept_path like ? ))", "%"+tools.IntToString(user.DeptId)+"%")
}
if role.DataScope == "5" || role.DataScope == "" {
return db.Where(tableName+".create_by = ?", userid)
}
return db
}
}
+9 -13
View File
@@ -42,15 +42,17 @@ func (e *SysJob) GetPage(pageSize int, pageIndex int, v interface{}, list interf
table := orm.Eloquent.Table(e.TableName()).Scopes(tools.MakeCondition(v))
// 数据权限控制(如果不需要数据权限请将此处去掉)
dataPermission := new(DataPermission)
dataPermission.UserId, _ = tools.StringToInt(e.DataScope)
table, err := dataPermission.GetDataScope(e.TableName(), table)
if err != nil {
return 0, err
}
//dataPermission := new(DataPermission)
userid, _ := tools.StringToInt(e.DataScope)
//dataPermission.UserId = userid
//table, err := dataPermission.GetDataScope(e.TableName(), table)
//if err != nil {
// return 0, err
//}
var count int64
if err := table.Scopes(tools.Paginate(pageSize, pageIndex)).Find(list).Offset(-1).Limit(-1).Count(&count).Error; err != nil {
if err := table.Scopes(DataScopes(e.TableName(),userid),tools.Paginate(pageSize, pageIndex)).Find(list).Offset(-1).Limit(-1).Count(&count).Error; err != nil {
return 0, err
}
return int(count), nil
@@ -66,9 +68,6 @@ func (e *SysJob) Update(id interface{}) (err error) {
}
func (e *SysJob) RemoveAllEntryID() (update SysJob, err error) {
//参数1:是要修改的数据
//参数2:是修改的数据
if err = orm.Eloquent.Table(e.TableName()).Where("entry_id > ?", 0).Update("entry_id", 0).Error; err != nil {
return
}
@@ -76,9 +75,6 @@ func (e *SysJob) RemoveAllEntryID() (update SysJob, err error) {
}
func (e *SysJob) RemoveEntryID(entryID int) (update SysJob, err error) {
//参数1:是要修改的数据
//参数2:是修改的数据
if err = orm.Eloquent.Table(e.TableName()).Where("entry_id = ?", entryID).Updates(map[string]interface{}{"entry_id": 0}).Error; err != nil {
return
}
+8 -8
View File
@@ -215,16 +215,16 @@ func (e *SysUser) GetPage(pageSize int, pageIndex int) ([]SysUserPage, int, erro
table = table.Where("sys_user.dept_id in (select dept_id from sys_dept where dept_path like ? )", "%"+tools.IntToString(e.DeptId)+"%")
}
// 数据权限控制
dataPermission := new(DataPermission)
dataPermission.UserId, _ = tools.StringToInt(e.DataScope)
table, err := dataPermission.GetDataScope("sys_user", table)
if err != nil {
return nil, 0, err
}
userid, _ := tools.StringToInt(e.DataScope)
//dataPermission.UserId = userid
//table, err := dataPermission.GetDataScope(e.TableName(), table)
//if err != nil {
// return 0, err
//}
var count int64
if err := table.Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&doc).Offset(-1).Limit(-1).Count(&count).Error; err != nil {
if err := table.Scopes(DataScopes(e.TableName(),userid)).Offset((pageIndex - 1) * pageSize).Limit(pageSize).Find(&doc).Offset(-1).Limit(-1).Count(&count).Error; err != nil {
return nil, 0, err
}
//table.Where("sys_user.deleted_at IS NULL").Count(&count)
-14
View File
@@ -16,15 +16,6 @@ type Page struct {
PageSize int `json:"pageSize"`
}
type PageResponse struct {
// 代码
Code int `json:"code" example:"200"`
// 数据集
Data Page `json:"data"`
// 消息
Msg string `json:"msg"`
}
func (res *Response) ReturnOK() *Response {
res.Code = 200
return res
@@ -34,8 +25,3 @@ func (res *Response) ReturnError(code int) *Response {
res.Code = code
return res
}
func (res *PageResponse) ReturnOK() *PageResponse {
res.Code = 200
return res
}
+6 -9
View File
@@ -27,15 +27,12 @@ func OK(c *gin.Context, data interface{}, msg string) {
// 分页数据处理
func PageOK(c *gin.Context, result interface{}, count int, pageIndex int, pageSize int, msg string) {
var res PageResponse
res.Data.List = result
res.Data.Count = count
res.Data.PageIndex = pageIndex
res.Data.PageSize = pageSize
if msg != "" {
res.Msg = msg
}
c.JSON(http.StatusOK, res.ReturnOK())
var res Page
res.List = result
res.Count = count
res.PageIndex = pageIndex
res.PageSize = pageSize
OK(c, res, msg)
}
// 兼容函数
+1 -1
View File
@@ -11,7 +11,7 @@ type GeneralDelDto struct {
Id string `uri:"id" json:"id" validate:"required"`
}
type GeneralGetDto struct {
Id string `uri:"id" json:"id" validate:"required"`
Id int `uri:"id" json:"id" validate:"required"`
}
func MakeCondition(q interface{}) func(db *gorm.DB) *gorm.DB {
+4
View File
@@ -1,6 +1,8 @@
package tools
import (
"log"
"runtime"
"strconv"
"golang.org/x/crypto/bcrypt"
@@ -50,6 +52,8 @@ func HasError(err error, msg string, code ...int) {
if msg == "" {
msg = err.Error()
}
_, file, line, _ := runtime.Caller(1)
log.Printf("%s:%v",file, line)
panic("CustomError#" + strconv.Itoa(statusCode) + "#" + msg)
}
}