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
config/settings.dev.yml
go-admin
middleware/demo.go
common/middleware/demo.go
config/settings.dev.b.yml
temp/logs
config/settings.dev.yml.log
@@ -6,7 +6,7 @@ import (
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding"
"go-admin/models"
"go-admin/app/admin/models"
"go-admin/tools"
"go-admin/tools/app"
)
@@ -6,7 +6,7 @@ import (
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding"
"go-admin/models"
"go-admin/app/admin/models"
"go-admin/tools"
"go-admin/tools/app"
)
@@ -4,7 +4,7 @@ import (
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding"
"go-admin/models"
"go-admin/app/admin/models"
"go-admin/tools"
"go-admin/tools/app"
"go-admin/tools/app/msg"
@@ -4,7 +4,7 @@ import (
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding"
"go-admin/models"
"go-admin/app/admin/models"
"go-admin/tools"
"go-admin/tools/app"
"go-admin/tools/app/msg"
@@ -4,7 +4,7 @@ import (
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding"
"go-admin/models"
"go-admin/app/admin/models"
"go-admin/tools"
"go-admin/tools/app"
"go-admin/tools/app/msg"
@@ -4,7 +4,7 @@ import (
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding"
"go-admin/models"
"go-admin/app/admin/models"
"go-admin/tools"
"go-admin/tools/app"
"go-admin/tools/app/msg"
@@ -1,12 +1,13 @@
package sysjob
import (
"go-admin/common/dto"
"time"
"github.com/gin-gonic/gin"
"go-admin/jobs"
"go-admin/models"
"go-admin/app/admin/models"
"go-admin/app/jobs"
"go-admin/tools"
"go-admin/tools/app"
"go-admin/tools/app/msg"
@@ -14,7 +15,7 @@ import (
func RemoveJob(c *gin.Context) {
var data models.SysJob
var v tools.GeneralDelDto
var v dto.GeneralDelDto
err := c.BindUri(&v)
tools.HasError(err, "", 500)
data.JobId = v.Id
@@ -36,7 +37,7 @@ func RemoveJob(c *gin.Context) {
func StartJob(c *gin.Context) {
var data models.SysJob
var v tools.GeneralGetDto
var v dto.GeneralGetDto
err := c.BindUri(&v)
tools.HasError(err, "", 500)
data.JobId = v.Id
@@ -6,7 +6,7 @@ import (
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding"
"go-admin/models"
"go-admin/app/admin/models"
"go-admin/tools"
"go-admin/tools/app"
"go-admin/tools/app/msg"
@@ -4,7 +4,7 @@ import (
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding"
"go-admin/models"
"go-admin/app/admin/models"
"go-admin/tools"
"go-admin/tools/app"
"go-admin/tools/app/msg"
@@ -6,7 +6,7 @@ import (
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding"
"go-admin/models"
"go-admin/app/admin/models"
"go-admin/tools"
"go-admin/tools/app"
)
@@ -6,7 +6,7 @@ import (
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding"
"go-admin/models"
"go-admin/app/admin/models"
"go-admin/tools"
"go-admin/tools/app"
)
@@ -44,7 +44,7 @@ func GetDictTypeList(c *gin.Context) {
result, count, err := data.GetPage(pageSize, pageIndex)
tools.HasError(err, "", -1)
app.PageOK(c,result,count,pageIndex,pageSize,"")
app.PageOK(c, result, count, pageIndex, pageSize, "")
}
// @Summary 通过字典id获取字典类型
@@ -3,7 +3,7 @@ package system
import (
"github.com/gin-gonic/gin"
"go-admin/models"
"go-admin/app/admin/models"
"go-admin/tools"
"go-admin/tools/app"
)
@@ -4,7 +4,7 @@ import (
"github.com/gin-gonic/gin"
"github.com/gin-gonic/gin/binding"
"go-admin/models"
"go-admin/app/admin/models"
"go-admin/tools"
"go-admin/tools/app"
)
@@ -3,7 +3,7 @@ package system
import (
"github.com/gin-gonic/gin"
"go-admin/models"
"go-admin/app/admin/models"
"go-admin/tools"
"go-admin/tools/app"
)
@@ -3,7 +3,7 @@ package system
import (
"github.com/gin-gonic/gin"
"go-admin/models"
"go-admin/app/admin/models"
"go-admin/tools"
"go-admin/tools/app"
)
@@ -145,6 +145,6 @@ func DeleteRole(c *gin.Context) {
IDS := tools.IdsStrToIdsIntGroup("roleId", c)
_, err := Role.BatchDelete(IDS)
tools.HasError(err, "删除失败1", -1)
tools.HasError(err, "删除失败", -1)
app.OK(c, "", "删除成功")
}
@@ -6,7 +6,7 @@ import (
"github.com/gin-gonic/gin"
"go-admin/models"
"go-admin/app/admin/models"
"go-admin/tools/app"
)
@@ -7,10 +7,9 @@ import (
"github.com/gin-gonic/gin"
"go-admin/models"
"go-admin/app/admin/models"
"go-admin/tools"
"go-admin/tools/app"
)
// @Summary 查询系统信息
@@ -5,8 +5,8 @@ import (
"github.com/gin-gonic/gin/binding"
"github.com/google/uuid"
"go-admin/global"
"go-admin/models"
"go-admin/app/admin/models"
"go-admin/common/global"
"go-admin/tools"
"go-admin/tools/app"
)
@@ -5,7 +5,7 @@ import (
"github.com/gin-gonic/gin"
"go-admin/models/tools"
"go-admin/app/admin/models/tools"
tools2 "go-admin/tools"
"go-admin/tools/app"
)
@@ -5,7 +5,7 @@ import (
"github.com/gin-gonic/gin"
"go-admin/models/tools"
"go-admin/app/admin/models/tools"
tools2 "go-admin/tools"
"go-admin/tools/app"
"go-admin/tools/config"
@@ -7,9 +7,9 @@ import (
"github.com/gin-gonic/gin"
"go-admin/global"
"go-admin/models"
"go-admin/models/tools"
"go-admin/app/admin/models"
"go-admin/app/admin/models/tools"
"go-admin/common/global"
tools2 "go-admin/tools"
"go-admin/tools/app"
"go-admin/tools/config"
@@ -6,7 +6,7 @@ import (
"github.com/gin-gonic/gin"
"go-admin/models/tools"
"go-admin/app/admin/models/tools"
tools2 "go-admin/tools"
"go-admin/tools/app"
)
@@ -3,7 +3,7 @@ package middleware
import (
"time"
"go-admin/handler"
"go-admin/app/admin/middleware/handler"
jwt "go-admin/pkg/jwtauth"
"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/mssola/user_agent"
"go-admin/global"
"go-admin/models"
"go-admin/app/admin/models"
"go-admin/common/global"
jwt "go-admin/pkg/jwtauth"
"go-admin/tools"
"go-admin/tools/config"
@@ -7,7 +7,6 @@ import (
"github.com/gin-gonic/gin"
jwt "go-admin/pkg/jwtauth"
)
func NoFound(c *gin.Context) {
@@ -7,11 +7,10 @@ import (
"github.com/gin-gonic/gin"
"go-admin/global"
"go-admin/models"
"go-admin/app/admin/models"
"go-admin/common/global"
"go-admin/tools"
config2 "go-admin/tools/config"
)
// 日志记录到文件
@@ -14,7 +14,7 @@ import (
//权限检查中间件
func AuthCheckRole() gin.HandlerFunc {
return func(c *gin.Context) {
data, _ := c.Get("JWT_PAYLOAD")
data, _ := c.Get(jwtauth.JwtPayloadKey)
v := data.(jwtauth.MapClaims)
e, err := mycasbin.Casbin()
tools.HasError(err, "", 500)
@@ -4,7 +4,7 @@ import (
"errors"
_ "time"
orm "go-admin/global"
orm "go-admin/common/global"
"go-admin/tools"
)
+1 -1
View File
@@ -4,7 +4,7 @@ import (
"errors"
_ "time"
orm "go-admin/global"
orm "go-admin/common/global"
"go-admin/tools"
)
@@ -3,7 +3,7 @@ package models
import (
"errors"
orm "go-admin/global"
orm "go-admin/common/global"
"go-admin/tools"
)
@@ -5,7 +5,7 @@ import (
"gorm.io/gorm"
orm "go-admin/global"
orm "go-admin/common/global"
"go-admin/tools"
)
@@ -1,7 +1,7 @@
package models
import (
orm "go-admin/global"
orm "go-admin/common/global"
"go-admin/tools"
)
@@ -3,10 +3,10 @@ package gorm
import (
"gorm.io/gorm"
"go-admin/models"
"go-admin/app/admin/models"
)
func InitData(db *gorm.DB) {
func InitData(db *gorm.DB) {
list := []models.CasbinRule{
{"p", "admin", "/api/v1/menulist", "GET", "", "", ""},
@@ -3,12 +3,12 @@ package gorm
import (
"gorm.io/gorm"
"go-admin/models"
"go-admin/models/tools"
"go-admin/app/admin/models"
"go-admin/app/admin/models/tools"
)
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.SysConfig),
new(tools.SysTables),
@@ -6,7 +6,7 @@ import (
"log"
"strings"
"go-admin/global"
"go-admin/common/global"
)
func InitDb() (err error) {
@@ -1,7 +1,7 @@
package models
import (
orm "go-admin/global"
orm "go-admin/common/global"
"go-admin/tools"
)
@@ -3,7 +3,7 @@ package models
import (
"time"
orm "go-admin/global"
orm "go-admin/common/global"
)
type LoginLog struct {
+1 -1
View File
@@ -3,7 +3,7 @@ package models
import (
"errors"
orm "go-admin/global"
orm "go-admin/common/global"
"go-admin/tools"
)
@@ -3,7 +3,7 @@ package models
import (
"time"
orm "go-admin/global"
orm "go-admin/common/global"
)
//sys_operlog
+1 -1
View File
@@ -1,7 +1,7 @@
package models
import (
orm "go-admin/global"
orm "go-admin/common/global"
"go-admin/tools"
)
+11 -1
View File
@@ -4,7 +4,7 @@ import (
"github.com/pkg/errors"
"gorm.io/gorm"
orm "go-admin/global"
orm "go-admin/common/global"
"go-admin/tools"
)
@@ -191,6 +191,16 @@ func (role *SysRole) BatchDelete(id []int) (Result bool, err error) {
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 {
tx.Rollback()
@@ -3,7 +3,7 @@ package models
import (
"fmt"
orm "go-admin/global"
orm "go-admin/common/global"
)
//sys_role_dept
@@ -3,7 +3,7 @@ package models
import (
"fmt"
orm "go-admin/global"
orm "go-admin/common/global"
"go-admin/tools"
)
@@ -1,7 +1,7 @@
package models
import (
orm "go-admin/global"
orm "go-admin/common/global"
"go-admin/tools"
)
@@ -1,7 +1,7 @@
package models
import (
orm "go-admin/global"
orm "go-admin/common/global"
"go-admin/tools"
)
@@ -1,7 +1,7 @@
package models
import (
orm "go-admin/global"
orm "go-admin/common/global"
"go-admin/tools"
)
@@ -1,9 +1,11 @@
package models
import (
orm "go-admin/global"
"go-admin/common/dto"
orm "go-admin/common/global"
"go-admin/common/models"
"go-admin/tools"
"go-admin/tools/model"
"strconv"
)
type SysJob struct {
@@ -28,7 +30,7 @@ func (SysJob) TableName() string {
return "sys_job"
}
func (e *SysJob) Generate() model.ActiveRecord {
func (e *SysJob) Generate() models.ActiveRecord {
o := *e
return &o
}
@@ -37,12 +39,12 @@ func (e *SysJob) GetId() interface{} {
return e.JobId
}
func (e *SysJob) SetCreateBy(createBy string) {
e.CreateBy = createBy
func (e *SysJob) SetCreateBy(createBy uint) {
e.CreateBy = strconv.Itoa(int(createBy))
}
func (e *SysJob) SetUpdateBy(updateBy string) {
e.UpdateBy = updateBy
func (e *SysJob) SetUpdateBy(updateBy uint) {
e.UpdateBy = strconv.Itoa(int(updateBy))
}
// 创建SysJob
@@ -57,7 +59,7 @@ func (e *SysJob) Get(id interface{}) (err error) {
// 获取SysJob带分页
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)
@@ -65,7 +67,7 @@ func (e *SysJob) GetPage(pageSize int, pageIndex int, v interface{}, list interf
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 int(count), nil
@@ -1,7 +1,7 @@
package models
import (
orm "go-admin/global"
orm "go-admin/common/global"
)
type SysSetting struct {
@@ -8,7 +8,7 @@ import (
"golang.org/x/crypto/bcrypt"
orm "go-admin/global"
orm "go-admin/common/global"
"go-admin/tools"
)
@@ -219,7 +219,7 @@ func (e *SysUser) GetPage(pageSize int, pageIndex int) ([]SysUserPage, int, erro
// 数据权限控制(如果不需要数据权限请将此处去掉)
dataPermission := new(DataPermission)
dataPermission.UserId, _ = tools.StringToInt(e.DataScope)
table,err := dataPermission.GetDataScope(e.TableName(), table)
table, err := dataPermission.GetDataScope(e.TableName(), table)
if err != nil {
return nil, 0, err
}
@@ -5,7 +5,7 @@ import (
"gorm.io/gorm"
orm "go-admin/global"
orm "go-admin/common/global"
"go-admin/tools"
config2 "go-admin/tools/config"
)
@@ -5,7 +5,7 @@ import (
"gorm.io/gorm"
orm "go-admin/global"
orm "go-admin/common/global"
"go-admin/tools"
config2 "go-admin/tools/config"
)
@@ -1,8 +1,8 @@
package tools
import (
orm "go-admin/global"
"go-admin/models"
"go-admin/app/admin/models"
orm "go-admin/common/global"
)
type SysColumns struct {
@@ -3,8 +3,8 @@ package tools
import (
"strings"
orm "go-admin/global"
"go-admin/models"
"go-admin/app/admin/models"
orm "go-admin/common/global"
)
type SysTables struct {
@@ -2,9 +2,9 @@ package router
import (
"github.com/gin-gonic/gin"
"go-admin/global"
"go-admin/handler"
"go-admin/middleware"
"go-admin/app/admin/middleware"
"go-admin/app/admin/middleware/handler"
"go-admin/common/global"
_ "go-admin/pkg/jwtauth"
"go-admin/tools"
config2 "go-admin/tools/config"
@@ -2,8 +2,8 @@ package router
import (
"github.com/gin-gonic/gin"
"go-admin/apis/syscategory"
"go-admin/middleware"
"go-admin/app/admin/apis/syscategory"
"go-admin/app/admin/middleware"
jwt "go-admin/pkg/jwtauth"
)
@@ -2,8 +2,8 @@ package router
import (
"github.com/gin-gonic/gin"
"go-admin/apis/syscontent"
"go-admin/middleware"
"go-admin/app/admin/apis/syscontent"
"go-admin/app/admin/middleware"
jwt "go-admin/pkg/jwtauth"
)
@@ -2,8 +2,8 @@ package router
import (
"github.com/gin-gonic/gin"
"go-admin/apis/sysfiledir"
"go-admin/apis/sysfileinfo"
"go-admin/app/admin/apis/sysfiledir"
"go-admin/app/admin/apis/sysfileinfo"
)
// 无需认证的路由代码
@@ -1,22 +1,23 @@
package router
import (
"go-admin/apis/actions"
log2 "go-admin/apis/log"
"go-admin/apis/monitor"
"go-admin/apis/public"
"go-admin/apis/sysjob"
"go-admin/apis/system"
"go-admin/apis/system/dict"
. "go-admin/apis/tools"
"mime"
log2 "go-admin/app/admin/apis/log"
"go-admin/app/admin/apis/monitor"
"go-admin/app/admin/apis/public"
"go-admin/app/admin/apis/sysjob"
"go-admin/app/admin/apis/system"
"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/handler"
"go-admin/middleware"
"go-admin/models"
jwt "go-admin/pkg/jwtauth"
"go-admin/pkg/ws"
"go-admin/service/dto"
"mime"
"github.com/gin-gonic/gin"
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())
{
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)
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.PUT("", actions.UpdateAction(new(dto.SysJobControl)))
r.DELETE("/:id", actions.DeleteAction(new(dto.SysJobById)))
r.PUT("", actions.PermissionAction(), actions.UpdateAction(new(dto.SysJobControl)))
r.DELETE("/:id", actions.PermissionAction(), actions.DeleteAction(new(dto.SysJobById)))
}
v1.GET("/job/remove/:jobId", sysjob.RemoveJob)
@@ -2,8 +2,10 @@ package dto
import (
"github.com/gin-gonic/gin"
"go-admin/models"
"go-admin/tools/model"
"go-admin/app/admin/models"
"go-admin/common/dto"
models2 "go-admin/common/models"
"net/http"
)
type SysJobSearch struct {
@@ -24,7 +26,7 @@ func (m *SysJobSearch) Bind(ctx *gin.Context) error {
return ctx.Bind(m)
}
func (m *SysJobSearch) Generate() Index {
func (m *SysJobSearch) Generate() dto.Index {
o := *m
return &o
}
@@ -55,12 +57,12 @@ func (s *SysJobControl) Bind(ctx *gin.Context) error {
return ctx.Bind(s)
}
func (s *SysJobControl) Generate() Control {
func (s *SysJobControl) Generate() dto.Control {
cp := *s
return &cp
}
func (s *SysJobControl) GenerateM() (model.ActiveRecord, error) {
func (s *SysJobControl) GenerateM() (models2.ActiveRecord, error) {
return &models.SysJob{
JobId: s.JobId,
JobName: s.JobName,
@@ -76,21 +78,40 @@ func (s *SysJobControl) GenerateM() (model.ActiveRecord, error) {
}, nil
}
func (s *SysJobControl) GetId() interface{} {
return s.JobId
}
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 {
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)
}
func (s *SysJobById) Generate() Control {
func (s *SysJobById) Generate() dto.Control {
cp := *s
return &cp
}
func (s *SysJobById) GenerateM() (model.ActiveRecord, error) {
return &models.SysJob{
JobId: s.Id,
}, nil
func (s *SysJobById) GenerateM() (models2.ActiveRecord, error) {
return &models.SysJob{}, 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"
"go-admin/global"
"go-admin/models"
"go-admin/app/admin/models"
"go-admin/common/global"
"go-admin/pkg"
"go-admin/pkg/cronjob"
)
View File
+4 -4
View File
@@ -13,12 +13,12 @@ import (
"github.com/spf13/cobra"
"github.com/spf13/viper"
"go-admin/database"
"go-admin/global"
"go-admin/jobs"
"go-admin/app/admin/router"
"go-admin/app/jobs"
"go-admin/common/database"
"go-admin/common/global"
mycasbin "go-admin/pkg/casbin"
"go-admin/pkg/logger"
"go-admin/router"
"go-admin/tools"
"go-admin/tools/config"
)
+1 -1
View File
@@ -11,7 +11,7 @@ import (
"go-admin/cmd/config"
"go-admin/cmd/migrate"
"go-admin/cmd/version"
"go-admin/global"
"go-admin/common/global"
"go-admin/tools"
)
+4 -4
View File
@@ -5,10 +5,10 @@ import (
"github.com/spf13/cobra"
"go-admin/database"
"go-admin/global"
"go-admin/models"
"go-admin/models/gorm"
"go-admin/app/admin/models"
"go-admin/app/admin/models/gorm"
"go-admin/common/database"
"go-admin/common/global"
"go-admin/pkg/logger"
"go-admin/tools/config"
)
+1 -1
View File
@@ -5,7 +5,7 @@ import (
"github.com/spf13/cobra"
"go-admin/global"
"go-admin/common/global"
)
var (
@@ -2,18 +2,17 @@ package actions
import (
"errors"
"go-admin/service/dto"
"github.com/gin-gonic/gin"
dto2 "go-admin/common/dto"
"go-admin/common/models"
"gorm.io/gorm"
"go-admin/tools"
"go-admin/tools/app"
"go-admin/tools/model"
)
// CreateAction 通用新增动作
func CreateAction(control dto.Control) gin.HandlerFunc {
func CreateAction(control dto2.Control) gin.HandlerFunc {
return func(c *gin.Context) {
req := control.Generate()
var err error
@@ -28,17 +27,17 @@ func CreateAction(control dto.Control) gin.HandlerFunc {
db := idb.(*gorm.DB)
err = req.Bind(c)
tools.HasError(err, "参数验证失败", 422)
var object model.ActiveRecord
var object models.ActiveRecord
object, err = req.GenerateM()
tools.HasError(err, "模型生成失败", 422)
object.SetCreateBy(tools.GetUserIdStr(c))
object.SetCreateBy(tools.GetUserIdUint(c))
err = db.WithContext(c).Create(object).Error
tools.HasError(err, "创建失败", 500)
app.OK(c, object.GetId(), "创建成功")
c.Next()
default:
err = errors.New("db connect not exist")
tools.HasError(err, "", 500)
}
c.Next()
}
}
@@ -2,18 +2,18 @@ package actions
import (
"errors"
"go-admin/service/dto"
dto2 "go-admin/common/dto"
"go-admin/common/models"
"go-admin/tools/app"
"github.com/gin-gonic/gin"
"gorm.io/gorm"
"go-admin/tools"
"go-admin/tools/model"
)
// DeleteAction 通用删除动作
func DeleteAction(control dto.Control) gin.HandlerFunc {
func DeleteAction(control dto2.Control) gin.HandlerFunc {
return func(c *gin.Context) {
var err error
idb, exist := c.Get("db")
@@ -28,17 +28,28 @@ func DeleteAction(control dto.Control) gin.HandlerFunc {
req := control.Generate()
err = req.Bind(c)
tools.HasError(err, "参数验证失败", 422)
var object model.ActiveRecord
var object models.ActiveRecord
object, err = req.GenerateM()
tools.HasError(err, "模型生成失败", 500)
object.SetUpdateBy(tools.GetUserIdStr(c))
err = db.WithContext(c).Delete(object).Error
tools.HasError(err, "更新失败", 500)
app.OK(c, object.GetId(), "更新成功")
object.SetUpdateBy(tools.GetUserIdUint(c))
//数据权限检查
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:
err = errors.New("db connect not exist")
tools.HasError(err, "", 500)
}
c.Next()
}
}
@@ -2,18 +2,18 @@ package actions
import (
"errors"
dto2 "go-admin/common/dto"
"go-admin/common/models"
"github.com/gin-gonic/gin"
"gorm.io/gorm"
"go-admin/service/dto"
"go-admin/tools"
"go-admin/tools/app"
"go-admin/tools/model"
)
// 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) {
list := f()
object := m.Generate()
@@ -33,15 +33,14 @@ func IndexAction(m model.ActiveRecord, d dto.Index, f func() interface{}) gin.Ha
tools.HasError(err, "参数验证失败", 422)
err = req.Bind(c)
tools.HasError(err, "参数验证失败", 422)
var p = new(dataPermission)
if userId := tools.GetUserIdStr(c); userId != "" {
p, err = newDataPermission(db, userId)
tools.HasError(err, "权限范围鉴定错误", 500)
}
//数据权限检查
p := getPermissionFromContext(c)
err = db.WithContext(c).Model(object).
Scopes(
tools.MakeCondition(req.GetNeedSearch()),
tools.Paginate(req.GetPageSize(), req.GetPageIndex()),
dto2.MakeCondition(req.GetNeedSearch()),
dto2.Paginate(req.GetPageSize(), req.GetPageIndex()),
Permission(object.TableName(), p),
).
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) {
tools.HasError(err, "查询失败", 500)
}
app.PageOK(c, list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
c.Next()
default:
err = errors.New("db connect not exist")
tools.HasError(err, "", 500)
}
app.PageOK(c, list, int(count), req.GetPageIndex(), req.GetPageSize(), "查询成功")
c.Next()
}
}
@@ -2,7 +2,8 @@ package actions
import (
"errors"
"go-admin/models"
"fmt"
"github.com/gin-gonic/gin"
"go-admin/tools/config"
"gorm.io/gorm"
@@ -17,26 +18,55 @@ type dataPermission struct {
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) {
var err error
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 {
err = errors.New("获取用户数据出错 msg:" + err.Error())
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
}
@@ -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 (
"errors"
"go-admin/service/dto"
"github.com/gin-gonic/gin"
dto2 "go-admin/common/dto"
"go-admin/common/models"
"gorm.io/gorm"
"go-admin/tools"
"go-admin/tools/app"
"go-admin/tools/model"
)
// UpdateAction 通用更新动作
func UpdateAction(control dto.Control) gin.HandlerFunc {
func UpdateAction(control dto2.Control) gin.HandlerFunc {
return func(c *gin.Context) {
req := control.Generate()
var err error
@@ -28,17 +27,27 @@ func UpdateAction(control dto.Control) gin.HandlerFunc {
db := idb.(*gorm.DB)
err = req.Bind(c)
tools.HasError(err, "参数验证失败", 422)
var object model.ActiveRecord
var object models.ActiveRecord
object, err = req.GenerateM()
tools.HasError(err, "参数验证失败", 422)
object.SetUpdateBy(tools.GetUserIdStr(c))
err = db.WithContext(c).Updates(object).Error
tools.HasError(err, "更新失败", 500)
object.SetUpdateBy(tools.GetUserIdUint(c))
//数据权限检查
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(), "更新成功")
c.Next()
default:
err = errors.New("db connect not exist")
tools.HasError(err, "", 500)
}
c.Next()
}
}
@@ -2,18 +2,18 @@ package actions
import (
"errors"
"go-admin/service/dto"
dto2 "go-admin/common/dto"
"go-admin/common/models"
"go-admin/tools/app"
"github.com/gin-gonic/gin"
"gorm.io/gorm"
"go-admin/tools"
"go-admin/tools/model"
)
// ViewAction 通用详情动作
func ViewAction(control dto.Control) gin.HandlerFunc {
func ViewAction(control dto2.Control) gin.HandlerFunc {
return func(c *gin.Context) {
var err error
idb, exist := c.Get("db")
@@ -28,16 +28,25 @@ func ViewAction(control dto.Control) gin.HandlerFunc {
req := control.Generate()
err = req.Bind(c)
tools.HasError(err, "参数验证失败", 422)
var object model.ActiveRecord
var object models.ActiveRecord
object, err = req.GenerateM()
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)
app.OK(c, object, "查看成功")
c.Next()
default:
err = errors.New("db connect not exist")
tools.HasError(err, "", 500)
}
c.Next()
}
}
@@ -9,7 +9,7 @@ import (
"os"
"time"
"go-admin/global"
"go-admin/common/global"
"go-admin/tools"
"go-admin/tools/config"
)
@@ -10,7 +10,7 @@ import (
"gorm.io/gorm/logger"
"gorm.io/gorm/schema"
"go-admin/global"
"go-admin/common/global"
"go-admin/tools/config"
)
@@ -12,7 +12,7 @@ import (
"gorm.io/gorm/logger"
"gorm.io/gorm/schema"
"go-admin/global"
"go-admin/common/global"
"go-admin/tools/config"
)
+1 -1
View File
@@ -1,4 +1,4 @@
package tools
package dto
import (
"go-admin/tools/config"
+3 -2
View File
@@ -2,7 +2,7 @@ package dto
import (
"github.com/gin-gonic/gin"
"go-admin/tools/model"
"go-admin/common/models"
)
type Index interface {
@@ -16,5 +16,6 @@ type Index interface {
type Control interface {
Generate() Control
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