Merge pull request #231 from matchstalk/table/dev

添加数据权限
This commit is contained in:
wenjianzhang
2020-09-04 00:37:02 +08:00
committed by GitHub
110 changed files with 330 additions and 202 deletions
+1 -1
View File
@@ -7,7 +7,7 @@ temp/
vendor vendor
config/settings.dev.yml config/settings.dev.yml
go-admin go-admin
middleware/demo.go common/middleware/demo.go
config/settings.dev.b.yml config/settings.dev.b.yml
temp/logs temp/logs
config/settings.dev.yml.log config/settings.dev.yml.log
@@ -6,7 +6,7 @@ import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding" "github.com/gin-gonic/gin/binding"
"go-admin/models" "go-admin/app/admin/models"
"go-admin/tools" "go-admin/tools"
"go-admin/tools/app" "go-admin/tools/app"
) )
@@ -6,7 +6,7 @@ import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding" "github.com/gin-gonic/gin/binding"
"go-admin/models" "go-admin/app/admin/models"
"go-admin/tools" "go-admin/tools"
"go-admin/tools/app" "go-admin/tools/app"
) )
@@ -4,7 +4,7 @@ import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding" "github.com/gin-gonic/gin/binding"
"go-admin/models" "go-admin/app/admin/models"
"go-admin/tools" "go-admin/tools"
"go-admin/tools/app" "go-admin/tools/app"
"go-admin/tools/app/msg" "go-admin/tools/app/msg"
@@ -4,7 +4,7 @@ import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding" "github.com/gin-gonic/gin/binding"
"go-admin/models" "go-admin/app/admin/models"
"go-admin/tools" "go-admin/tools"
"go-admin/tools/app" "go-admin/tools/app"
"go-admin/tools/app/msg" "go-admin/tools/app/msg"
@@ -4,7 +4,7 @@ import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding" "github.com/gin-gonic/gin/binding"
"go-admin/models" "go-admin/app/admin/models"
"go-admin/tools" "go-admin/tools"
"go-admin/tools/app" "go-admin/tools/app"
"go-admin/tools/app/msg" "go-admin/tools/app/msg"
@@ -4,7 +4,7 @@ import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding" "github.com/gin-gonic/gin/binding"
"go-admin/models" "go-admin/app/admin/models"
"go-admin/tools" "go-admin/tools"
"go-admin/tools/app" "go-admin/tools/app"
"go-admin/tools/app/msg" "go-admin/tools/app/msg"
@@ -1,12 +1,13 @@
package sysjob package sysjob
import ( import (
"go-admin/common/dto"
"time" "time"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"go-admin/jobs" "go-admin/app/admin/models"
"go-admin/models" "go-admin/app/jobs"
"go-admin/tools" "go-admin/tools"
"go-admin/tools/app" "go-admin/tools/app"
"go-admin/tools/app/msg" "go-admin/tools/app/msg"
@@ -14,7 +15,7 @@ import (
func RemoveJob(c *gin.Context) { func RemoveJob(c *gin.Context) {
var data models.SysJob var data models.SysJob
var v tools.GeneralDelDto var v dto.GeneralDelDto
err := c.BindUri(&v) err := c.BindUri(&v)
tools.HasError(err, "", 500) tools.HasError(err, "", 500)
data.JobId = v.Id data.JobId = v.Id
@@ -36,7 +37,7 @@ func RemoveJob(c *gin.Context) {
func StartJob(c *gin.Context) { func StartJob(c *gin.Context) {
var data models.SysJob var data models.SysJob
var v tools.GeneralGetDto var v dto.GeneralGetDto
err := c.BindUri(&v) err := c.BindUri(&v)
tools.HasError(err, "", 500) tools.HasError(err, "", 500)
data.JobId = v.Id data.JobId = v.Id
@@ -6,7 +6,7 @@ import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding" "github.com/gin-gonic/gin/binding"
"go-admin/models" "go-admin/app/admin/models"
"go-admin/tools" "go-admin/tools"
"go-admin/tools/app" "go-admin/tools/app"
"go-admin/tools/app/msg" "go-admin/tools/app/msg"
@@ -4,7 +4,7 @@ import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding" "github.com/gin-gonic/gin/binding"
"go-admin/models" "go-admin/app/admin/models"
"go-admin/tools" "go-admin/tools"
"go-admin/tools/app" "go-admin/tools/app"
"go-admin/tools/app/msg" "go-admin/tools/app/msg"
@@ -6,7 +6,7 @@ import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding" "github.com/gin-gonic/gin/binding"
"go-admin/models" "go-admin/app/admin/models"
"go-admin/tools" "go-admin/tools"
"go-admin/tools/app" "go-admin/tools/app"
) )
@@ -6,7 +6,7 @@ import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding" "github.com/gin-gonic/gin/binding"
"go-admin/models" "go-admin/app/admin/models"
"go-admin/tools" "go-admin/tools"
"go-admin/tools/app" "go-admin/tools/app"
) )
@@ -44,7 +44,7 @@ func GetDictTypeList(c *gin.Context) {
result, count, err := data.GetPage(pageSize, pageIndex) result, count, err := data.GetPage(pageSize, pageIndex)
tools.HasError(err, "", -1) tools.HasError(err, "", -1)
app.PageOK(c,result,count,pageIndex,pageSize,"") app.PageOK(c, result, count, pageIndex, pageSize, "")
} }
// @Summary 通过字典id获取字典类型 // @Summary 通过字典id获取字典类型
@@ -3,7 +3,7 @@ package system
import ( import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"go-admin/models" "go-admin/app/admin/models"
"go-admin/tools" "go-admin/tools"
"go-admin/tools/app" "go-admin/tools/app"
) )
@@ -4,7 +4,7 @@ import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding" "github.com/gin-gonic/gin/binding"
"go-admin/models" "go-admin/app/admin/models"
"go-admin/tools" "go-admin/tools"
"go-admin/tools/app" "go-admin/tools/app"
) )
@@ -3,7 +3,7 @@ package system
import ( import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"go-admin/models" "go-admin/app/admin/models"
"go-admin/tools" "go-admin/tools"
"go-admin/tools/app" "go-admin/tools/app"
) )
@@ -3,7 +3,7 @@ package system
import ( import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"go-admin/models" "go-admin/app/admin/models"
"go-admin/tools" "go-admin/tools"
"go-admin/tools/app" "go-admin/tools/app"
) )
@@ -145,6 +145,6 @@ func DeleteRole(c *gin.Context) {
IDS := tools.IdsStrToIdsIntGroup("roleId", c) IDS := tools.IdsStrToIdsIntGroup("roleId", c)
_, err := Role.BatchDelete(IDS) _, err := Role.BatchDelete(IDS)
tools.HasError(err, "删除失败1", -1) tools.HasError(err, "删除失败", -1)
app.OK(c, "", "删除成功") app.OK(c, "", "删除成功")
} }
@@ -6,7 +6,7 @@ import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"go-admin/models" "go-admin/app/admin/models"
"go-admin/tools/app" "go-admin/tools/app"
) )
@@ -7,10 +7,9 @@ import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"go-admin/models" "go-admin/app/admin/models"
"go-admin/tools" "go-admin/tools"
"go-admin/tools/app" "go-admin/tools/app"
) )
// @Summary 查询系统信息 // @Summary 查询系统信息
@@ -5,8 +5,8 @@ import (
"github.com/gin-gonic/gin/binding" "github.com/gin-gonic/gin/binding"
"github.com/google/uuid" "github.com/google/uuid"
"go-admin/global" "go-admin/app/admin/models"
"go-admin/models" "go-admin/common/global"
"go-admin/tools" "go-admin/tools"
"go-admin/tools/app" "go-admin/tools/app"
) )
@@ -5,7 +5,7 @@ import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"go-admin/models/tools" "go-admin/app/admin/models/tools"
tools2 "go-admin/tools" tools2 "go-admin/tools"
"go-admin/tools/app" "go-admin/tools/app"
) )
@@ -5,7 +5,7 @@ import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"go-admin/models/tools" "go-admin/app/admin/models/tools"
tools2 "go-admin/tools" tools2 "go-admin/tools"
"go-admin/tools/app" "go-admin/tools/app"
"go-admin/tools/config" "go-admin/tools/config"
@@ -7,9 +7,9 @@ import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"go-admin/global" "go-admin/app/admin/models"
"go-admin/models" "go-admin/app/admin/models/tools"
"go-admin/models/tools" "go-admin/common/global"
tools2 "go-admin/tools" tools2 "go-admin/tools"
"go-admin/tools/app" "go-admin/tools/app"
"go-admin/tools/config" "go-admin/tools/config"
@@ -6,7 +6,7 @@ import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"go-admin/models/tools" "go-admin/app/admin/models/tools"
tools2 "go-admin/tools" tools2 "go-admin/tools"
"go-admin/tools/app" "go-admin/tools/app"
) )
@@ -3,7 +3,7 @@ package middleware
import ( import (
"time" "time"
"go-admin/handler" "go-admin/app/admin/middleware/handler"
jwt "go-admin/pkg/jwtauth" jwt "go-admin/pkg/jwtauth"
"go-admin/tools/config" "go-admin/tools/config"
) )
+5
View File
@@ -0,0 +1,5 @@
package middleware
import "go-admin/common/middleware"
var WithContextDb = middleware.WithContextDb
@@ -7,8 +7,8 @@ import (
"github.com/mojocn/base64Captcha" "github.com/mojocn/base64Captcha"
"github.com/mssola/user_agent" "github.com/mssola/user_agent"
"go-admin/global" "go-admin/app/admin/models"
"go-admin/models" "go-admin/common/global"
jwt "go-admin/pkg/jwtauth" jwt "go-admin/pkg/jwtauth"
"go-admin/tools" "go-admin/tools"
"go-admin/tools/config" "go-admin/tools/config"
@@ -7,7 +7,6 @@ import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
jwt "go-admin/pkg/jwtauth" jwt "go-admin/pkg/jwtauth"
) )
func NoFound(c *gin.Context) { func NoFound(c *gin.Context) {
@@ -7,11 +7,10 @@ import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"go-admin/global" "go-admin/app/admin/models"
"go-admin/models" "go-admin/common/global"
"go-admin/tools" "go-admin/tools"
config2 "go-admin/tools/config" config2 "go-admin/tools/config"
) )
// 日志记录到文件 // 日志记录到文件
@@ -14,7 +14,7 @@ import (
//权限检查中间件 //权限检查中间件
func AuthCheckRole() gin.HandlerFunc { func AuthCheckRole() gin.HandlerFunc {
return func(c *gin.Context) { return func(c *gin.Context) {
data, _ := c.Get("JWT_PAYLOAD") data, _ := c.Get(jwtauth.JwtPayloadKey)
v := data.(jwtauth.MapClaims) v := data.(jwtauth.MapClaims)
e, err := mycasbin.Casbin() e, err := mycasbin.Casbin()
tools.HasError(err, "", 500) tools.HasError(err, "", 500)
@@ -4,7 +4,7 @@ import (
"errors" "errors"
_ "time" _ "time"
orm "go-admin/global" orm "go-admin/common/global"
"go-admin/tools" "go-admin/tools"
) )
+1 -1
View File
@@ -4,7 +4,7 @@ import (
"errors" "errors"
_ "time" _ "time"
orm "go-admin/global" orm "go-admin/common/global"
"go-admin/tools" "go-admin/tools"
) )
@@ -3,7 +3,7 @@ package models
import ( import (
"errors" "errors"
orm "go-admin/global" orm "go-admin/common/global"
"go-admin/tools" "go-admin/tools"
) )
@@ -5,7 +5,7 @@ import (
"gorm.io/gorm" "gorm.io/gorm"
orm "go-admin/global" orm "go-admin/common/global"
"go-admin/tools" "go-admin/tools"
) )
@@ -1,7 +1,7 @@
package models package models
import ( import (
orm "go-admin/global" orm "go-admin/common/global"
"go-admin/tools" "go-admin/tools"
) )
@@ -3,10 +3,10 @@ package gorm
import ( import (
"gorm.io/gorm" "gorm.io/gorm"
"go-admin/models" "go-admin/app/admin/models"
) )
func InitData(db *gorm.DB) { func InitData(db *gorm.DB) {
list := []models.CasbinRule{ list := []models.CasbinRule{
{"p", "admin", "/api/v1/menulist", "GET", "", "", ""}, {"p", "admin", "/api/v1/menulist", "GET", "", "", ""},
@@ -3,12 +3,12 @@ package gorm
import ( import (
"gorm.io/gorm" "gorm.io/gorm"
"go-admin/models" "go-admin/app/admin/models"
"go-admin/models/tools" "go-admin/app/admin/models/tools"
) )
func AutoMigrate(db *gorm.DB) (err error) { func AutoMigrate(db *gorm.DB) (err error) {
err = db.AutoMigrate(new(models.CasbinRule), err = db.Migrator().AutoMigrate(new(models.CasbinRule),
new(models.SysDept), new(models.SysDept),
new(models.SysConfig), new(models.SysConfig),
new(tools.SysTables), new(tools.SysTables),
@@ -6,7 +6,7 @@ import (
"log" "log"
"strings" "strings"
"go-admin/global" "go-admin/common/global"
) )
func InitDb() (err error) { func InitDb() (err error) {
@@ -1,7 +1,7 @@
package models package models
import ( import (
orm "go-admin/global" orm "go-admin/common/global"
"go-admin/tools" "go-admin/tools"
) )
@@ -3,7 +3,7 @@ package models
import ( import (
"time" "time"
orm "go-admin/global" orm "go-admin/common/global"
) )
type LoginLog struct { type LoginLog struct {
+1 -1
View File
@@ -3,7 +3,7 @@ package models
import ( import (
"errors" "errors"
orm "go-admin/global" orm "go-admin/common/global"
"go-admin/tools" "go-admin/tools"
) )
@@ -3,7 +3,7 @@ package models
import ( import (
"time" "time"
orm "go-admin/global" orm "go-admin/common/global"
) )
//sys_operlog //sys_operlog
+1 -1
View File
@@ -1,7 +1,7 @@
package models package models
import ( import (
orm "go-admin/global" orm "go-admin/common/global"
"go-admin/tools" "go-admin/tools"
) )
+11 -1
View File
@@ -4,7 +4,7 @@ import (
"github.com/pkg/errors" "github.com/pkg/errors"
"gorm.io/gorm" "gorm.io/gorm"
orm "go-admin/global" orm "go-admin/common/global"
"go-admin/tools" "go-admin/tools"
) )
@@ -191,6 +191,16 @@ func (role *SysRole) BatchDelete(id []int) (Result bool, err error) {
return false, err return false, err
} }
var count int64
if err := tx.Table("sys_user").Where("role_id in (?)", id).Count(&count).Error; err != nil {
tx.Rollback()
return false, err
}
if count > 0 {
tx.Rollback()
return false, errors.New("存在绑定用户,请解绑后重试")
}
// 删除角色 // 删除角色
if err = tx.Table(role.TableName()).Where("role_id in (?)", id).Unscoped().Delete(&SysRole{}).Error; err != nil { if err = tx.Table(role.TableName()).Where("role_id in (?)", id).Unscoped().Delete(&SysRole{}).Error; err != nil {
tx.Rollback() tx.Rollback()
@@ -3,7 +3,7 @@ package models
import ( import (
"fmt" "fmt"
orm "go-admin/global" orm "go-admin/common/global"
) )
//sys_role_dept //sys_role_dept
@@ -3,7 +3,7 @@ package models
import ( import (
"fmt" "fmt"
orm "go-admin/global" orm "go-admin/common/global"
"go-admin/tools" "go-admin/tools"
) )
@@ -1,7 +1,7 @@
package models package models
import ( import (
orm "go-admin/global" orm "go-admin/common/global"
"go-admin/tools" "go-admin/tools"
) )
@@ -1,7 +1,7 @@
package models package models
import ( import (
orm "go-admin/global" orm "go-admin/common/global"
"go-admin/tools" "go-admin/tools"
) )
@@ -1,7 +1,7 @@
package models package models
import ( import (
orm "go-admin/global" orm "go-admin/common/global"
"go-admin/tools" "go-admin/tools"
) )
@@ -1,9 +1,11 @@
package models package models
import ( import (
orm "go-admin/global" "go-admin/common/dto"
orm "go-admin/common/global"
"go-admin/common/models"
"go-admin/tools" "go-admin/tools"
"go-admin/tools/model" "strconv"
) )
type SysJob struct { type SysJob struct {
@@ -28,7 +30,7 @@ func (SysJob) TableName() string {
return "sys_job" return "sys_job"
} }
func (e *SysJob) Generate() model.ActiveRecord { func (e *SysJob) Generate() models.ActiveRecord {
o := *e o := *e
return &o return &o
} }
@@ -37,12 +39,12 @@ func (e *SysJob) GetId() interface{} {
return e.JobId return e.JobId
} }
func (e *SysJob) SetCreateBy(createBy string) { func (e *SysJob) SetCreateBy(createBy uint) {
e.CreateBy = createBy e.CreateBy = strconv.Itoa(int(createBy))
} }
func (e *SysJob) SetUpdateBy(updateBy string) { func (e *SysJob) SetUpdateBy(updateBy uint) {
e.UpdateBy = updateBy e.UpdateBy = strconv.Itoa(int(updateBy))
} }
// 创建SysJob // 创建SysJob
@@ -57,7 +59,7 @@ func (e *SysJob) Get(id interface{}) (err error) {
// 获取SysJob带分页 // 获取SysJob带分页
func (e *SysJob) GetPage(pageSize int, pageIndex int, v interface{}, list interface{}) (int, error) { func (e *SysJob) GetPage(pageSize int, pageIndex int, v interface{}, list interface{}) (int, error) {
table := orm.Eloquent.Table(e.TableName()).Scopes(tools.MakeCondition(v)) table := orm.Eloquent.Table(e.TableName()).Scopes(dto.MakeCondition(v))
// 数据权限控制(如果不需要数据权限请将此处去掉) // 数据权限控制(如果不需要数据权限请将此处去掉)
//dataPermission := new(DataPermission) //dataPermission := new(DataPermission)
@@ -65,7 +67,7 @@ func (e *SysJob) GetPage(pageSize int, pageIndex int, v interface{}, list interf
var count int64 var count int64
if err := table.Scopes(DataScopes(e.TableName(), userid), tools.Paginate(pageSize, pageIndex)).Find(list).Offset(-1).Limit(-1).Count(&count).Error; err != nil { if err := table.Scopes(DataScopes(e.TableName(), userid), dto.Paginate(pageSize, pageIndex)).Find(list).Offset(-1).Limit(-1).Count(&count).Error; err != nil {
return 0, err return 0, err
} }
return int(count), nil return int(count), nil
@@ -1,7 +1,7 @@
package models package models
import ( import (
orm "go-admin/global" orm "go-admin/common/global"
) )
type SysSetting struct { type SysSetting struct {
@@ -8,7 +8,7 @@ import (
"golang.org/x/crypto/bcrypt" "golang.org/x/crypto/bcrypt"
orm "go-admin/global" orm "go-admin/common/global"
"go-admin/tools" "go-admin/tools"
) )
@@ -219,7 +219,7 @@ func (e *SysUser) GetPage(pageSize int, pageIndex int) ([]SysUserPage, int, erro
// 数据权限控制(如果不需要数据权限请将此处去掉) // 数据权限控制(如果不需要数据权限请将此处去掉)
dataPermission := new(DataPermission) dataPermission := new(DataPermission)
dataPermission.UserId, _ = tools.StringToInt(e.DataScope) dataPermission.UserId, _ = tools.StringToInt(e.DataScope)
table,err := dataPermission.GetDataScope(e.TableName(), table) table, err := dataPermission.GetDataScope(e.TableName(), table)
if err != nil { if err != nil {
return nil, 0, err return nil, 0, err
} }
@@ -5,7 +5,7 @@ import (
"gorm.io/gorm" "gorm.io/gorm"
orm "go-admin/global" orm "go-admin/common/global"
"go-admin/tools" "go-admin/tools"
config2 "go-admin/tools/config" config2 "go-admin/tools/config"
) )
@@ -5,7 +5,7 @@ import (
"gorm.io/gorm" "gorm.io/gorm"
orm "go-admin/global" orm "go-admin/common/global"
"go-admin/tools" "go-admin/tools"
config2 "go-admin/tools/config" config2 "go-admin/tools/config"
) )
@@ -1,8 +1,8 @@
package tools package tools
import ( import (
orm "go-admin/global" "go-admin/app/admin/models"
"go-admin/models" orm "go-admin/common/global"
) )
type SysColumns struct { type SysColumns struct {
@@ -3,8 +3,8 @@ package tools
import ( import (
"strings" "strings"
orm "go-admin/global" "go-admin/app/admin/models"
"go-admin/models" orm "go-admin/common/global"
) )
type SysTables struct { type SysTables struct {
@@ -2,9 +2,9 @@ package router
import ( import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"go-admin/global" "go-admin/app/admin/middleware"
"go-admin/handler" "go-admin/app/admin/middleware/handler"
"go-admin/middleware" "go-admin/common/global"
_ "go-admin/pkg/jwtauth" _ "go-admin/pkg/jwtauth"
"go-admin/tools" "go-admin/tools"
config2 "go-admin/tools/config" config2 "go-admin/tools/config"
@@ -2,8 +2,8 @@ package router
import ( import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"go-admin/apis/syscategory" "go-admin/app/admin/apis/syscategory"
"go-admin/middleware" "go-admin/app/admin/middleware"
jwt "go-admin/pkg/jwtauth" jwt "go-admin/pkg/jwtauth"
) )
@@ -2,8 +2,8 @@ package router
import ( import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"go-admin/apis/syscontent" "go-admin/app/admin/apis/syscontent"
"go-admin/middleware" "go-admin/app/admin/middleware"
jwt "go-admin/pkg/jwtauth" jwt "go-admin/pkg/jwtauth"
) )
@@ -2,8 +2,8 @@ package router
import ( import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"go-admin/apis/sysfiledir" "go-admin/app/admin/apis/sysfiledir"
"go-admin/apis/sysfileinfo" "go-admin/app/admin/apis/sysfileinfo"
) )
// 无需认证的路由代码 // 无需认证的路由代码
@@ -1,22 +1,23 @@
package router package router
import ( import (
"go-admin/apis/actions" "mime"
log2 "go-admin/apis/log"
"go-admin/apis/monitor" log2 "go-admin/app/admin/apis/log"
"go-admin/apis/public" "go-admin/app/admin/apis/monitor"
"go-admin/apis/sysjob" "go-admin/app/admin/apis/public"
"go-admin/apis/system" "go-admin/app/admin/apis/sysjob"
"go-admin/apis/system/dict" "go-admin/app/admin/apis/system"
. "go-admin/apis/tools" "go-admin/app/admin/apis/system/dict"
. "go-admin/app/admin/apis/tools"
"go-admin/app/admin/middleware"
"go-admin/app/admin/middleware/handler"
"go-admin/app/admin/models"
"go-admin/app/admin/service/dto"
"go-admin/common/actions"
_ "go-admin/docs" _ "go-admin/docs"
"go-admin/handler"
"go-admin/middleware"
"go-admin/models"
jwt "go-admin/pkg/jwtauth" jwt "go-admin/pkg/jwtauth"
"go-admin/pkg/ws" "go-admin/pkg/ws"
"go-admin/service/dto"
"mime"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
ginSwagger "github.com/swaggo/gin-swagger" ginSwagger "github.com/swaggo/gin-swagger"
@@ -112,14 +113,14 @@ func registerSysJobRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddlew
r := v1.Group("/sysjob").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole()) r := v1.Group("/sysjob").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole())
{ {
sysJob := &models.SysJob{} sysJob := &models.SysJob{}
r.GET("", actions.IndexAction(sysJob, new(dto.SysJobSearch), func() interface{} { r.GET("", actions.PermissionAction(), actions.IndexAction(sysJob, new(dto.SysJobSearch), func() interface{} {
list := make([]models.SysJob, 0) list := make([]models.SysJob, 0)
return &list return &list
})) }))
r.GET("/:id", actions.ViewAction(new(dto.SysJobById))) r.GET("/:id", actions.PermissionAction(), actions.ViewAction(new(dto.SysJobById)))
r.POST("", actions.CreateAction(new(dto.SysJobControl))) r.POST("", actions.CreateAction(new(dto.SysJobControl)))
r.PUT("", actions.UpdateAction(new(dto.SysJobControl))) r.PUT("", actions.PermissionAction(), actions.UpdateAction(new(dto.SysJobControl)))
r.DELETE("/:id", actions.DeleteAction(new(dto.SysJobById))) r.DELETE("/:id", actions.PermissionAction(), actions.DeleteAction(new(dto.SysJobById)))
} }
v1.GET("/job/remove/:jobId", sysjob.RemoveJob) v1.GET("/job/remove/:jobId", sysjob.RemoveJob)
@@ -2,8 +2,10 @@ package dto
import ( import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"go-admin/models" "go-admin/app/admin/models"
"go-admin/tools/model" "go-admin/common/dto"
models2 "go-admin/common/models"
"net/http"
) )
type SysJobSearch struct { type SysJobSearch struct {
@@ -24,7 +26,7 @@ func (m *SysJobSearch) Bind(ctx *gin.Context) error {
return ctx.Bind(m) return ctx.Bind(m)
} }
func (m *SysJobSearch) Generate() Index { func (m *SysJobSearch) Generate() dto.Index {
o := *m o := *m
return &o return &o
} }
@@ -55,12 +57,12 @@ func (s *SysJobControl) Bind(ctx *gin.Context) error {
return ctx.Bind(s) return ctx.Bind(s)
} }
func (s *SysJobControl) Generate() Control { func (s *SysJobControl) Generate() dto.Control {
cp := *s cp := *s
return &cp return &cp
} }
func (s *SysJobControl) GenerateM() (model.ActiveRecord, error) { func (s *SysJobControl) GenerateM() (models2.ActiveRecord, error) {
return &models.SysJob{ return &models.SysJob{
JobId: s.JobId, JobId: s.JobId,
JobName: s.JobName, JobName: s.JobName,
@@ -76,21 +78,40 @@ func (s *SysJobControl) GenerateM() (model.ActiveRecord, error) {
}, nil }, nil
} }
func (s *SysJobControl) GetId() interface{} {
return s.JobId
}
type SysJobById struct { type SysJobById struct {
Id int `uri:"id" validate:"required"` Id int `uri:"id" validate:"required"`
Ids []int `json:"ids"`
} }
func (s *SysJobById) Bind(ctx *gin.Context) error { func (s *SysJobById) Bind(ctx *gin.Context) error {
if ctx.Request.Method == http.MethodDelete {
err := ctx.Bind(s)
if err != nil {
return err
}
if len(s.Ids) > 0 {
return nil
}
}
return ctx.BindUri(s) return ctx.BindUri(s)
} }
func (s *SysJobById) Generate() Control { func (s *SysJobById) Generate() dto.Control {
cp := *s cp := *s
return &cp return &cp
} }
func (s *SysJobById) GenerateM() (model.ActiveRecord, error) { func (s *SysJobById) GenerateM() (models2.ActiveRecord, error) {
return &models.SysJob{ return &models.SysJob{}, nil
JobId: s.Id, }
}, nil
func (s *SysJobById) GetId() interface{} {
if len(s.Ids) > 0 {
return s.Ids
}
return s.Id
} }
+2 -2
View File
@@ -7,8 +7,8 @@ import (
"github.com/robfig/cron/v3" "github.com/robfig/cron/v3"
"go-admin/global" "go-admin/app/admin/models"
"go-admin/models" "go-admin/common/global"
"go-admin/pkg" "go-admin/pkg"
"go-admin/pkg/cronjob" "go-admin/pkg/cronjob"
) )
View File
+4 -4
View File
@@ -13,12 +13,12 @@ import (
"github.com/spf13/cobra" "github.com/spf13/cobra"
"github.com/spf13/viper" "github.com/spf13/viper"
"go-admin/database" "go-admin/app/admin/router"
"go-admin/global" "go-admin/app/jobs"
"go-admin/jobs" "go-admin/common/database"
"go-admin/common/global"
mycasbin "go-admin/pkg/casbin" mycasbin "go-admin/pkg/casbin"
"go-admin/pkg/logger" "go-admin/pkg/logger"
"go-admin/router"
"go-admin/tools" "go-admin/tools"
"go-admin/tools/config" "go-admin/tools/config"
) )
+1 -1
View File
@@ -11,7 +11,7 @@ import (
"go-admin/cmd/config" "go-admin/cmd/config"
"go-admin/cmd/migrate" "go-admin/cmd/migrate"
"go-admin/cmd/version" "go-admin/cmd/version"
"go-admin/global" "go-admin/common/global"
"go-admin/tools" "go-admin/tools"
) )
+4 -4
View File
@@ -5,10 +5,10 @@ import (
"github.com/spf13/cobra" "github.com/spf13/cobra"
"go-admin/database" "go-admin/app/admin/models"
"go-admin/global" "go-admin/app/admin/models/gorm"
"go-admin/models" "go-admin/common/database"
"go-admin/models/gorm" "go-admin/common/global"
"go-admin/pkg/logger" "go-admin/pkg/logger"
"go-admin/tools/config" "go-admin/tools/config"
) )
+1 -1
View File
@@ -5,7 +5,7 @@ import (
"github.com/spf13/cobra" "github.com/spf13/cobra"
"go-admin/global" "go-admin/common/global"
) )
var ( var (
@@ -2,18 +2,17 @@ package actions
import ( import (
"errors" "errors"
"go-admin/service/dto"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
dto2 "go-admin/common/dto"
"go-admin/common/models"
"gorm.io/gorm" "gorm.io/gorm"
"go-admin/tools" "go-admin/tools"
"go-admin/tools/app" "go-admin/tools/app"
"go-admin/tools/model"
) )
// CreateAction 通用新增动作 // CreateAction 通用新增动作
func CreateAction(control dto.Control) gin.HandlerFunc { func CreateAction(control dto2.Control) gin.HandlerFunc {
return func(c *gin.Context) { return func(c *gin.Context) {
req := control.Generate() req := control.Generate()
var err error var err error
@@ -28,17 +27,17 @@ func CreateAction(control dto.Control) gin.HandlerFunc {
db := idb.(*gorm.DB) db := idb.(*gorm.DB)
err = req.Bind(c) err = req.Bind(c)
tools.HasError(err, "参数验证失败", 422) tools.HasError(err, "参数验证失败", 422)
var object model.ActiveRecord var object models.ActiveRecord
object, err = req.GenerateM() object, err = req.GenerateM()
tools.HasError(err, "模型生成失败", 422) tools.HasError(err, "模型生成失败", 422)
object.SetCreateBy(tools.GetUserIdStr(c)) object.SetCreateBy(tools.GetUserIdUint(c))
err = db.WithContext(c).Create(object).Error err = db.WithContext(c).Create(object).Error
tools.HasError(err, "创建失败", 500) tools.HasError(err, "创建失败", 500)
app.OK(c, object.GetId(), "创建成功") app.OK(c, object.GetId(), "创建成功")
c.Next()
default: default:
err = errors.New("db connect not exist") err = errors.New("db connect not exist")
tools.HasError(err, "", 500) tools.HasError(err, "", 500)
} }
c.Next()
} }
} }
@@ -2,18 +2,18 @@ package actions
import ( import (
"errors" "errors"
"go-admin/service/dto" dto2 "go-admin/common/dto"
"go-admin/common/models"
"go-admin/tools/app" "go-admin/tools/app"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"gorm.io/gorm" "gorm.io/gorm"
"go-admin/tools" "go-admin/tools"
"go-admin/tools/model"
) )
// DeleteAction 通用删除动作 // DeleteAction 通用删除动作
func DeleteAction(control dto.Control) gin.HandlerFunc { func DeleteAction(control dto2.Control) gin.HandlerFunc {
return func(c *gin.Context) { return func(c *gin.Context) {
var err error var err error
idb, exist := c.Get("db") idb, exist := c.Get("db")
@@ -28,17 +28,28 @@ func DeleteAction(control dto.Control) gin.HandlerFunc {
req := control.Generate() req := control.Generate()
err = req.Bind(c) err = req.Bind(c)
tools.HasError(err, "参数验证失败", 422) tools.HasError(err, "参数验证失败", 422)
var object model.ActiveRecord var object models.ActiveRecord
object, err = req.GenerateM() object, err = req.GenerateM()
tools.HasError(err, "模型生成失败", 500) tools.HasError(err, "模型生成失败", 500)
object.SetUpdateBy(tools.GetUserIdStr(c))
err = db.WithContext(c).Delete(object).Error object.SetUpdateBy(tools.GetUserIdUint(c))
tools.HasError(err, "更新失败", 500)
app.OK(c, object.GetId(), "更新成功") //数据权限检查
p := getPermissionFromContext(c)
db = db.WithContext(c).Scopes(
Permission(object.TableName(), p),
).Where(req.GetId()).Delete(object)
tools.HasError(db.Error, "删除失败", 500)
if db.RowsAffected == 0 {
err = errors.New("无权删除该数据")
tools.HasError(err, "", 403)
}
app.OK(c, object.GetId(), "删除成功")
c.Next()
default: default:
err = errors.New("db connect not exist") err = errors.New("db connect not exist")
tools.HasError(err, "", 500) tools.HasError(err, "", 500)
} }
c.Next()
} }
} }
@@ -2,18 +2,18 @@ package actions
import ( import (
"errors" "errors"
dto2 "go-admin/common/dto"
"go-admin/common/models"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"gorm.io/gorm" "gorm.io/gorm"
"go-admin/service/dto"
"go-admin/tools" "go-admin/tools"
"go-admin/tools/app" "go-admin/tools/app"
"go-admin/tools/model"
) )
// IndexAction 通用查询动作 // IndexAction 通用查询动作
func IndexAction(m model.ActiveRecord, d dto.Index, f func() interface{}) gin.HandlerFunc { func IndexAction(m models.ActiveRecord, d dto2.Index, f func() interface{}) gin.HandlerFunc {
return func(c *gin.Context) { return func(c *gin.Context) {
list := f() list := f()
object := m.Generate() object := m.Generate()
@@ -33,15 +33,14 @@ func IndexAction(m model.ActiveRecord, d dto.Index, f func() interface{}) gin.Ha
tools.HasError(err, "参数验证失败", 422) tools.HasError(err, "参数验证失败", 422)
err = req.Bind(c) err = req.Bind(c)
tools.HasError(err, "参数验证失败", 422) tools.HasError(err, "参数验证失败", 422)
var p = new(dataPermission)
if userId := tools.GetUserIdStr(c); userId != "" { //数据权限检查
p, err = newDataPermission(db, userId) p := getPermissionFromContext(c)
tools.HasError(err, "权限范围鉴定错误", 500)
}
err = db.WithContext(c).Model(object). err = db.WithContext(c).Model(object).
Scopes( Scopes(
tools.MakeCondition(req.GetNeedSearch()), dto2.MakeCondition(req.GetNeedSearch()),
tools.Paginate(req.GetPageSize(), req.GetPageIndex()), dto2.Paginate(req.GetPageSize(), req.GetPageIndex()),
Permission(object.TableName(), p), Permission(object.TableName(), p),
). ).
Find(list).Limit(-1).Offset(-1). Find(list).Limit(-1).Offset(-1).
@@ -49,11 +48,11 @@ func IndexAction(m model.ActiveRecord, d dto.Index, f func() interface{}) gin.Ha
if !errors.Is(err, gorm.ErrRecordNotFound) { if !errors.Is(err, gorm.ErrRecordNotFound) {
tools.HasError(err, "查询失败", 500) tools.HasError(err, "查询失败", 500)
} }
app.PageOK(c, list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
c.Next()
default: default:
err = errors.New("db connect not exist") err = errors.New("db connect not exist")
tools.HasError(err, "", 500) tools.HasError(err, "", 500)
} }
app.PageOK(c, list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
c.Next()
} }
} }
@@ -2,7 +2,8 @@ package actions
import ( import (
"errors" "errors"
"go-admin/models" "fmt"
"github.com/gin-gonic/gin"
"go-admin/tools/config" "go-admin/tools/config"
"gorm.io/gorm" "gorm.io/gorm"
@@ -17,26 +18,55 @@ type dataPermission struct {
RoleId int RoleId int
} }
func PermissionAction() gin.HandlerFunc {
return func(c *gin.Context) {
var err error
idb, exist := c.Get("db")
if !exist {
err = errors.New("db connect not exist")
tools.HasError(err, "", 500)
}
switch idb.(type) {
case *gorm.DB:
db := idb.(*gorm.DB)
var p = new(dataPermission)
if userId := tools.GetUserIdStr(c); userId != "" {
p, err = newDataPermission(db, userId)
if err != nil {
c.JSON(500, gin.H{
"code": 500,
"msg": fmt.Sprintf("权限范围鉴定错误, error:%v", err),
})
c.Abort()
return
}
}
c.Set(PermissionKey, p)
default:
c.JSON(500, gin.H{
"code": 500,
"msg": "db connect not exist",
})
c.Abort()
return
}
c.Next()
}
}
func newDataPermission(tx *gorm.DB, userId interface{}) (*dataPermission, error) { func newDataPermission(tx *gorm.DB, userId interface{}) (*dataPermission, error) {
var err error var err error
p := &dataPermission{} p := &dataPermission{}
sysUser := new(models.SysUser)
sysRole := new(models.SysRole)
err = sysUser.GetByUserId(tx, userId) err = tx.Table("sys_user").
Select("sys_user.user_id", "sys_role.role_id", "sys_user.dept_id", "sys_role.data_scope").
Joins("left join sys_role on sys_role.role_id = sys_user.role_id").
Where("sys_user.user_id = ?", userId).
Scan(&p).Error
if err != nil { if err != nil {
err = errors.New("获取用户数据出错 msg:" + err.Error()) err = errors.New("获取用户数据出错 msg:" + err.Error())
return nil, err return nil, err
} }
p.UserId = sysUser.UserId
p.RoleId = sysUser.RoleId
p.DeptId = sysUser.DeptId
err = sysRole.GetById(tx, sysUser.RoleId)
if err != nil {
err = errors.New("获取用户数据出错 msg:" + err.Error())
return nil, err
}
p.DataScope = sysRole.DataScope
return p, nil return p, nil
} }
@@ -59,3 +89,14 @@ func Permission(tableName string, p *dataPermission) func(db *gorm.DB) *gorm.DB
} }
} }
} }
func getPermissionFromContext(c *gin.Context) *dataPermission {
p := new(dataPermission)
if pm, ok := c.Get(PermissionKey); ok {
switch pm.(type) {
case *dataPermission:
p = pm.(*dataPermission)
}
}
return p
}
+5
View File
@@ -0,0 +1,5 @@
package actions
const (
PermissionKey = "dataPermission"
)
@@ -2,18 +2,17 @@ package actions
import ( import (
"errors" "errors"
"go-admin/service/dto"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
dto2 "go-admin/common/dto"
"go-admin/common/models"
"gorm.io/gorm" "gorm.io/gorm"
"go-admin/tools" "go-admin/tools"
"go-admin/tools/app" "go-admin/tools/app"
"go-admin/tools/model"
) )
// UpdateAction 通用更新动作 // UpdateAction 通用更新动作
func UpdateAction(control dto.Control) gin.HandlerFunc { func UpdateAction(control dto2.Control) gin.HandlerFunc {
return func(c *gin.Context) { return func(c *gin.Context) {
req := control.Generate() req := control.Generate()
var err error var err error
@@ -28,17 +27,27 @@ func UpdateAction(control dto.Control) gin.HandlerFunc {
db := idb.(*gorm.DB) db := idb.(*gorm.DB)
err = req.Bind(c) err = req.Bind(c)
tools.HasError(err, "参数验证失败", 422) tools.HasError(err, "参数验证失败", 422)
var object model.ActiveRecord var object models.ActiveRecord
object, err = req.GenerateM() object, err = req.GenerateM()
tools.HasError(err, "参数验证失败", 422) tools.HasError(err, "参数验证失败", 422)
object.SetUpdateBy(tools.GetUserIdStr(c)) object.SetUpdateBy(tools.GetUserIdUint(c))
err = db.WithContext(c).Updates(object).Error
tools.HasError(err, "更新失败", 500) //数据权限检查
p := getPermissionFromContext(c)
db = db.WithContext(c).Scopes(
Permission(object.TableName(), p),
).Where(req.GetId()).Updates(object)
tools.HasError(db.Error, "更新失败", 500)
if db.RowsAffected == 0 {
err = errors.New("无权更新该数据")
tools.HasError(err, "", 403)
}
app.OK(c, object.GetId(), "更新成功") app.OK(c, object.GetId(), "更新成功")
c.Next()
default: default:
err = errors.New("db connect not exist") err = errors.New("db connect not exist")
tools.HasError(err, "", 500) tools.HasError(err, "", 500)
} }
c.Next()
} }
} }
@@ -2,18 +2,18 @@ package actions
import ( import (
"errors" "errors"
"go-admin/service/dto" dto2 "go-admin/common/dto"
"go-admin/common/models"
"go-admin/tools/app" "go-admin/tools/app"
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"gorm.io/gorm" "gorm.io/gorm"
"go-admin/tools" "go-admin/tools"
"go-admin/tools/model"
) )
// ViewAction 通用详情动作 // ViewAction 通用详情动作
func ViewAction(control dto.Control) gin.HandlerFunc { func ViewAction(control dto2.Control) gin.HandlerFunc {
return func(c *gin.Context) { return func(c *gin.Context) {
var err error var err error
idb, exist := c.Get("db") idb, exist := c.Get("db")
@@ -28,16 +28,25 @@ func ViewAction(control dto.Control) gin.HandlerFunc {
req := control.Generate() req := control.Generate()
err = req.Bind(c) err = req.Bind(c)
tools.HasError(err, "参数验证失败", 422) tools.HasError(err, "参数验证失败", 422)
var object model.ActiveRecord var object models.ActiveRecord
object, err = req.GenerateM() object, err = req.GenerateM()
tools.HasError(err, "模型生成失败", 500) tools.HasError(err, "模型生成失败", 500)
err = db.WithContext(c).First(object).Error
//数据权限检查
p := getPermissionFromContext(c)
err = db.WithContext(c).Scopes(
Permission(object.TableName(), p),
).Where(req.GetId()).First(object).Error
if errors.Is(err, gorm.ErrRecordNotFound) {
tools.HasError(err, "查看失败", 404)
}
tools.HasError(err, "查看失败", 500) tools.HasError(err, "查看失败", 500)
app.OK(c, object, "查看成功") app.OK(c, object, "查看成功")
c.Next()
default: default:
err = errors.New("db connect not exist") err = errors.New("db connect not exist")
tools.HasError(err, "", 500) tools.HasError(err, "", 500)
} }
c.Next()
} }
} }
@@ -9,7 +9,7 @@ import (
"os" "os"
"time" "time"
"go-admin/global" "go-admin/common/global"
"go-admin/tools" "go-admin/tools"
"go-admin/tools/config" "go-admin/tools/config"
) )
@@ -10,7 +10,7 @@ import (
"gorm.io/gorm/logger" "gorm.io/gorm/logger"
"gorm.io/gorm/schema" "gorm.io/gorm/schema"
"go-admin/global" "go-admin/common/global"
"go-admin/tools/config" "go-admin/tools/config"
) )
@@ -12,7 +12,7 @@ import (
"gorm.io/gorm/logger" "gorm.io/gorm/logger"
"gorm.io/gorm/schema" "gorm.io/gorm/schema"
"go-admin/global" "go-admin/common/global"
"go-admin/tools/config" "go-admin/tools/config"
) )
+1 -1
View File
@@ -1,4 +1,4 @@
package tools package dto
import ( import (
"go-admin/tools/config" "go-admin/tools/config"
+3 -2
View File
@@ -2,7 +2,7 @@ package dto
import ( import (
"github.com/gin-gonic/gin" "github.com/gin-gonic/gin"
"go-admin/tools/model" "go-admin/common/models"
) )
type Index interface { type Index interface {
@@ -16,5 +16,6 @@ type Index interface {
type Control interface { type Control interface {
Generate() Control Generate() Control
Bind(ctx *gin.Context) error Bind(ctx *gin.Context) error
GenerateM() (model.ActiveRecord, error) GenerateM() (models.ActiveRecord, error)
GetId() interface{}
} }

Some files were not shown because too many files have changed in this diff Show More