refactor🎨: 改造升级用户管理模块

This commit is contained in:
zhangwenjian
2021-06-03 09:27:34 +08:00
parent 602ff26988
commit c05cb63bc7
4 changed files with 218 additions and 55 deletions
+109 -41
View File
@@ -1,6 +1,7 @@
package apis package apis
import ( import (
"github.com/gin-gonic/gin/binding"
"go-admin/app/admin/models" "go-admin/app/admin/models"
"net/http" "net/http"
@@ -29,11 +30,11 @@ type SysUser struct {
// @Router /api/v1/sysUser [get] // @Router /api/v1/sysUser [get]
// @Security Bearer // @Security Bearer
func (e SysUser) GetSysUserList(c *gin.Context) { func (e SysUser) GetSysUserList(c *gin.Context) {
s := new(service.SysUser) s := service.SysUser{}
req := new(dto.SysUserSearch) req := dto.SysUserSearch{}
err := e.MakeContext(c). err := e.MakeContext(c).
MakeOrm(). MakeOrm().
Bind(req). Bind(&req, binding.Form).
MakeService(&s.Service). MakeService(&s.Service).
Errors Errors
if err != nil { if err != nil {
@@ -48,7 +49,7 @@ func (e SysUser) GetSysUserList(c *gin.Context) {
list := make([]models.SysUser, 0) list := make([]models.SysUser, 0)
var count int64 var count int64
err = s.GetSysUserPage(req, p, &list, &count) err = s.GetSysUserPage(&req, p, &list, &count)
if err != nil { if err != nil {
e.Error(http.StatusInternalServerError, err, "查询失败") e.Error(http.StatusInternalServerError, err, "查询失败")
return return
@@ -66,11 +67,11 @@ func (e SysUser) GetSysUserList(c *gin.Context) {
// @Router /api/v1/sysUser/{userId} [get] // @Router /api/v1/sysUser/{userId} [get]
// @Security Bearer // @Security Bearer
func (e SysUser) GetSysUser(c *gin.Context) { func (e SysUser) GetSysUser(c *gin.Context) {
s := new(service.SysUser) s := service.SysUser{}
req := new(dto.SysUserById) req := dto.SysUserById{}
err := e.MakeContext(c). err := e.MakeContext(c).
MakeOrm(). MakeOrm().
Bind(req). Bind(&req, nil).
MakeService(&s.Service). MakeService(&s.Service).
Errors Errors
if err != nil { if err != nil {
@@ -78,18 +79,14 @@ func (e SysUser) GetSysUser(c *gin.Context) {
e.Logger.Error(err) e.Logger.Error(err)
return return
} }
var object models.SysUser var object models.SysUser
//数据权限检查 //数据权限检查
p := actions.GetPermissionFromContext(c) p := actions.GetPermissionFromContext(c)
err = s.GetSysUser(&req, p, &object)
err = s.GetSysUser(req, p, &object)
if err != nil { if err != nil {
e.Error(http.StatusUnprocessableEntity, err, "查询失败") e.Error(http.StatusUnprocessableEntity, err, "查询失败")
return return
} }
e.OK(object, "查看成功") e.OK(object, "查看成功")
} }
@@ -104,11 +101,11 @@ func (e SysUser) GetSysUser(c *gin.Context) {
// @Success 200 {string} string "{"code": -1, "message": "添加失败"}" // @Success 200 {string} string "{"code": -1, "message": "添加失败"}"
// @Router /api/v1/sysUser [post] // @Router /api/v1/sysUser [post]
func (e SysUser) InsertSysUser(c *gin.Context) { func (e SysUser) InsertSysUser(c *gin.Context) {
s := new(service.SysUser) s := service.SysUser{}
req := new(dto.SysUserControl) req := dto.SysUserControl{}
err := e.MakeContext(c). err := e.MakeContext(c).
MakeOrm(). MakeOrm().
Bind(req). Bind(&req, binding.JSON).
MakeService(&s.Service). MakeService(&s.Service).
Errors Errors
if err != nil { if err != nil {
@@ -116,14 +113,12 @@ func (e SysUser) InsertSysUser(c *gin.Context) {
e.Logger.Error(err) e.Logger.Error(err)
return return
} }
// 设置创建人 // 设置创建人
req.SetCreateBy(user.GetUserId(c)) req.SetCreateBy(user.GetUserId(c))
err = s.InsertSysUser(&req)
err = s.InsertSysUser(req)
if err != nil { if err != nil {
e.Logger.Error(err) e.Logger.Error(err)
e.Error(http.StatusInternalServerError, err, "创建失败") e.Error(http.StatusInternalServerError, err, err.Error())
return return
} }
@@ -141,11 +136,11 @@ func (e SysUser) InsertSysUser(c *gin.Context) {
// @Success 200 {string} string "{"code": -1, "message": "修改失败"}" // @Success 200 {string} string "{"code": -1, "message": "修改失败"}"
// @Router /api/v1/sysuser/{userId} [put] // @Router /api/v1/sysuser/{userId} [put]
func (e SysUser) UpdateSysUser(c *gin.Context) { func (e SysUser) UpdateSysUser(c *gin.Context) {
s := new(service.SysUser) s := service.SysUser{}
req := new(dto.SysUserControl) req := dto.SysUserControl{}
err := e.MakeContext(c). err := e.MakeContext(c).
MakeOrm(). MakeOrm().
Bind(req). Bind(&req, binding.JSON, nil).
MakeService(&s.Service). MakeService(&s.Service).
Errors Errors
if err != nil { if err != nil {
@@ -159,7 +154,7 @@ func (e SysUser) UpdateSysUser(c *gin.Context) {
//数据权限检查 //数据权限检查
p := actions.GetPermissionFromContext(c) p := actions.GetPermissionFromContext(c)
err = s.UpdateSysUser(req, p) err = s.UpdateSysUser(&req, p)
if err != nil { if err != nil {
e.Logger.Error(err) e.Logger.Error(err)
return return
@@ -176,11 +171,11 @@ func (e SysUser) UpdateSysUser(c *gin.Context) {
// @Success 200 {string} string "{"code": -1, "message": "删除失败"}" // @Success 200 {string} string "{"code": -1, "message": "删除失败"}"
// @Router /api/v1/sysuser/{userId} [delete] // @Router /api/v1/sysuser/{userId} [delete]
func (e SysUser) DeleteSysUser(c *gin.Context) { func (e SysUser) DeleteSysUser(c *gin.Context) {
s := new(service.SysUser) s := service.SysUser{}
req := new(dto.SysUserById) req := dto.SysUserById{}
err := e.MakeContext(c). err := e.MakeContext(c).
MakeOrm(). MakeOrm().
Bind(req). Bind(&req, binding.JSON, nil).
MakeService(&s.Service). MakeService(&s.Service).
Errors Errors
if err != nil { if err != nil {
@@ -195,7 +190,7 @@ func (e SysUser) DeleteSysUser(c *gin.Context) {
// 数据权限检查 // 数据权限检查
p := actions.GetPermissionFromContext(c) p := actions.GetPermissionFromContext(c)
err = s.RemoveSysUser(req, p) err = s.RemoveSysUser(&req, p)
if err != nil { if err != nil {
e.Logger.Error(err) e.Logger.Error(err)
return return
@@ -214,7 +209,7 @@ func (e SysUser) DeleteSysUser(c *gin.Context) {
// @Router /api/v1/user/avatar [post] // @Router /api/v1/user/avatar [post]
func (e SysUser) InsetSysUserAvatar(c *gin.Context) { func (e SysUser) InsetSysUserAvatar(c *gin.Context) {
s := service.SysUser{} s := service.SysUser{}
req := new(dto.SysUserControl) req := dto.SysUserControl{}
err := e.MakeContext(c). err := e.MakeContext(c).
MakeOrm(). MakeOrm().
MakeService(&s.Service). MakeService(&s.Service).
@@ -226,7 +221,6 @@ func (e SysUser) InsetSysUserAvatar(c *gin.Context) {
} }
// 数据权限检查 // 数据权限检查
p := actions.GetPermissionFromContext(c) p := actions.GetPermissionFromContext(c)
form, _ := c.MultipartForm() form, _ := c.MultipartForm()
files := form.File["upload[]"] files := form.File["upload[]"]
guid := uuid.New().String() guid := uuid.New().String()
@@ -244,7 +238,7 @@ func (e SysUser) InsetSysUserAvatar(c *gin.Context) {
req.UserId = p.UserId req.UserId = p.UserId
req.Avatar = "/" + filPath req.Avatar = "/" + filPath
err = s.UpdateSysUser(req, p) err = s.UpdateSysUser(&req, p)
if err != nil { if err != nil {
e.Logger.Error(err) e.Logger.Error(err)
return return
@@ -252,7 +246,81 @@ func (e SysUser) InsetSysUserAvatar(c *gin.Context) {
e.OK(filPath, "修改成功") e.OK(filPath, "修改成功")
} }
// SysUserUpdatePwd // UpdateSysUserStatus 修改用户状态
// @Summary 修改用户状态
// @Description 获取JSON
// @Tags 用户
// @Accept application/json
// @Product application/json
// @Param data body dto.UpdateSysUserStatusReq true "body"
// @Success 200 {string} string "{"code": 200, "message": "修改成功"}"
// @Success 200 {string} string "{"code": -1, "message": "修改失败"}"
// @Router /api/v1/user/status [put]
func (e SysUser) UpdateSysUserStatus(c *gin.Context) {
s := service.SysUser{}
req := dto.UpdateSysUserStatusReq{}
err := e.MakeContext(c).
MakeOrm().
Bind(&req).
MakeService(&s.Service).
Errors
if err != nil {
e.Error(http.StatusInternalServerError, err, err.Error())
e.Logger.Error(err)
return
}
req.SetUpdateBy(user.GetUserId(c))
//数据权限检查
p := actions.GetPermissionFromContext(c)
err = s.UpdateSysUserStatus(&req, p)
if err != nil {
e.Logger.Error(err)
return
}
e.OK(req.GetId(), "更新成功")
}
// ResetSysUserPwd 重置用户密码
// @Summary 重置用户密码
// @Description 获取JSON
// @Tags 用户
// @Accept application/json
// @Product application/json
// @Param data body dto.ResetSysUserPwdReq true "body"
// @Success 200 {string} string "{"code": 200, "message": "修改成功"}"
// @Success 200 {string} string "{"code": -1, "message": "修改失败"}"
// @Router /api/v1/user/pwd/reset [put]
func (e SysUser) ResetSysUserPwd(c *gin.Context) {
s := service.SysUser{}
req := dto.ResetSysUserPwdReq{}
err := e.MakeContext(c).
MakeOrm().
Bind(&req).
MakeService(&s.Service).
Errors
if err != nil {
e.Error(http.StatusInternalServerError, err, err.Error())
e.Logger.Error(err)
return
}
req.SetUpdateBy(user.GetUserId(c))
//数据权限检查
p := actions.GetPermissionFromContext(c)
err = s.ResetSysUserPwd(&req, p)
if err != nil {
e.Logger.Error(err)
return
}
e.OK(req.GetId(), "更新成功")
}
// UpdateSysUserPwd
// @Summary 重置密码 // @Summary 重置密码
// @Description 获取JSON // @Description 获取JSON
// @Tags 用户 // @Tags 用户
@@ -262,12 +330,12 @@ func (e SysUser) InsetSysUserAvatar(c *gin.Context) {
// @Success 200 {object} response.Response "{"code": 200, "data": [...]}" // @Success 200 {object} response.Response "{"code": 200, "data": [...]}"
// @Router /api/v1/user/pwd [post] // @Router /api/v1/user/pwd [post]
// @Security Bearer // @Security Bearer
func (e SysUser) SysUserUpdatePwd(c *gin.Context) { func (e SysUser) UpdateSysUserPwd(c *gin.Context) {
s := new(service.SysUser) s := service.SysUser{}
req := new(dto.PassWord) req := dto.PassWord{}
err := e.MakeContext(c). err := e.MakeContext(c).
MakeOrm(). MakeOrm().
Bind(req). Bind(&req).
MakeService(&s.Service). MakeService(&s.Service).
Errors Errors
if err != nil { if err != nil {
@@ -296,8 +364,8 @@ func (e SysUser) SysUserUpdatePwd(c *gin.Context) {
// @Router /api/v1/user/profile [get] // @Router /api/v1/user/profile [get]
// @Security Bearer // @Security Bearer
func (e SysUser) GetSysUserProfile(c *gin.Context) { func (e SysUser) GetSysUserProfile(c *gin.Context) {
s := new(service.SysUser) s := service.SysUser{}
req := new(dto.SysUserById) req := dto.SysUserById{}
err := e.MakeContext(c). err := e.MakeContext(c).
MakeOrm(). MakeOrm().
MakeService(&s.Service). MakeService(&s.Service).
@@ -313,7 +381,7 @@ func (e SysUser) GetSysUserProfile(c *gin.Context) {
user := new(models.SysUser) user := new(models.SysUser)
roles := make([]models.SysRole, 0) roles := make([]models.SysRole, 0)
posts := make([]models.SysPost, 0) posts := make([]models.SysPost, 0)
err = s.GetSysUserProfile(req, user, &roles, &posts) err = s.GetSysUserProfile(&req, user, &roles, &posts)
if err != nil { if err != nil {
e.Logger.Errorf("get user profile error, %s", err.Error()) e.Logger.Errorf("get user profile error, %s", err.Error())
e.Error(http.StatusInternalServerError, err, "获取用户信息失败") e.Error(http.StatusInternalServerError, err, "获取用户信息失败")
@@ -327,8 +395,8 @@ func (e SysUser) GetSysUserProfile(c *gin.Context) {
} }
func (e SysUser) GetInfo(c *gin.Context) { func (e SysUser) GetInfo(c *gin.Context) {
req := new(dto.SysUserById) req := dto.SysUserById{}
s := new(service.SysUser) s := service.SysUser{}
err := e.MakeContext(c). err := e.MakeContext(c).
MakeOrm(). MakeOrm().
MakeService(&s.Service). MakeService(&s.Service).
@@ -369,7 +437,7 @@ func (e SysUser) GetInfo(c *gin.Context) {
req.Id = user.GetUserId(c) req.Id = user.GetUserId(c)
err = s.GetSysUser(req, p, &sysUser) err = s.GetSysUser(&req, p, &sysUser)
if err != nil { if err != nil {
e.Error(http.StatusUnauthorized, err, "登录失败") e.Error(http.StatusUnauthorized, err, "登录失败")
return return
+4 -2
View File
@@ -15,7 +15,7 @@ func init() {
// 需认证的路由代码 // 需认证的路由代码
func registerSysUserRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) { func registerSysUserRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddleware) {
api := apis.SysUser{} api := apis.SysUser{}
r := v1.Group("/sysUser").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole()).Use(actions.PermissionAction()) r := v1.Group("/sys-user").Use(authMiddleware.MiddlewareFunc()).Use(middleware.AuthCheckRole()).Use(actions.PermissionAction())
{ {
r.GET("", api.GetSysUserList) r.GET("", api.GetSysUserList)
r.GET("/:id", api.GetSysUser) r.GET("/:id", api.GetSysUser)
@@ -28,7 +28,9 @@ func registerSysUserRouter(v1 *gin.RouterGroup, authMiddleware *jwt.GinJWTMiddle
{ {
user.GET("/profile", api.GetSysUserProfile) user.GET("/profile", api.GetSysUserProfile)
user.POST("/avatar", api.InsetSysUserAvatar) user.POST("/avatar", api.InsetSysUserAvatar)
user.PUT("/pwd", api.SysUserUpdatePwd) user.PUT("/pwd", api.UpdateSysUserPwd)
user.PUT("/pwd/reset", api.ResetSysUserPwd)
user.PUT("/status", api.UpdateSysUserStatus)
} }
v1auth := v1.Group("").Use(authMiddleware.MiddlewareFunc()) v1auth := v1.Group("").Use(authMiddleware.MiddlewareFunc())
{ {
+42 -7
View File
@@ -9,7 +9,7 @@ import (
type SysUserSearch struct { type SysUserSearch struct {
dto.Pagination `search:"-"` dto.Pagination `search:"-"`
UserId int `form:"UserId" search:"type:exact;column:user_id;table:sys_user" comment:"用户ID"` UserId int `form:"userId" search:"type:exact;column:user_id;table:sys_user" comment:"用户ID"`
Username string `form:"username" search:"type:contains;column:username;table:sys_user" comment:"用户名"` Username string `form:"username" search:"type:contains;column:username;table:sys_user" comment:"用户名"`
NickName string `form:"nickName" search:"type:contains;column:nick_name;table:sys_user" comment:"昵称"` NickName string `form:"nickName" search:"type:contains;column:nick_name;table:sys_user" comment:"昵称"`
Phone string `form:"phone" search:"type:contains;column:phone;table:sys_user" comment:"手机号"` Phone string `form:"phone" search:"type:contains;column:phone;table:sys_user" comment:"手机号"`
@@ -29,24 +29,59 @@ type SysUserOrder struct {
CreatedAtOrder string `search:"type:order;column:created_at;table:sys_user" form:"createdAtOrder"` CreatedAtOrder string `search:"type:order;column:created_at;table:sys_user" form:"createdAtOrder"`
} }
func (m *SysUserSearch) GetNeedSearch() interface{} { func (m *SysUserSearch) GetNeedSearch() interface{} {
return *m return *m
} }
type ResetSysUserPwdReq struct {
UserId int `json:"userId" comment:"用户ID" binding:"required"` // 用户ID
Password string `json:"password" comment:"密码" binding:"required"`
common.ControlBy
}
func (s *ResetSysUserPwdReq) GetId() interface{} {
return s.UserId
}
func (s *ResetSysUserPwdReq) Generate(model *models.SysUser) {
if s.UserId != 0 {
model.UserId = s.UserId
}
model.Password = s.Password
}
type UpdateSysUserStatusReq struct {
UserId int `json:"userId" comment:"用户ID" binding:"required"` // 用户ID
Status string `json:"status" comment:"状态" binding:"required"`
common.ControlBy
}
func (s *UpdateSysUserStatusReq) GetId() interface{} {
return s.UserId
}
func (s *UpdateSysUserStatusReq) Generate(model *models.SysUser) {
if s.UserId != 0 {
model.UserId = s.UserId
}
model.Status = s.Status
}
type SysUserControl struct { type SysUserControl struct {
UserId int `json:"userId" comment:"用户ID"` // 用户ID UserId int `json:"userId" comment:"用户ID"` // 用户ID
Username string `json:"username" comment:"用户名"` Username string `json:"username" comment:"用户名" binding:"required"`
Password string `json:"password" comment:"密码"` Password string `json:"password" comment:"密码"`
NickName string `json:"nickName" comment:"昵称"` NickName string `json:"nickName" comment:"昵称" binding:"required"`
Phone string `json:"phone" comment:"手机号"` Phone string `json:"phone" comment:"手机号" binding:"required"`
RoleId int `json:"roleId" comment:"角色ID"` RoleId int `json:"roleId" comment:"角色ID"`
Avatar string `json:"avatar" comment:"头像"` Avatar string `json:"avatar" comment:"头像"`
Sex string `json:"sex" comment:"性别"` Sex string `json:"sex" comment:"性别"`
Email string `json:"email" comment:"邮箱"` Email string `json:"email" comment:"邮箱" binding:"required,email"`
DeptId int `json:"deptId" comment:"部门"` DeptId int `json:"deptId" comment:"部门" binding:"required"`
PostId int `json:"postId" comment:"岗位"` PostId int `json:"postId" comment:"岗位"`
Remark string `json:"remark" comment:"备注"` Remark string `json:"remark" comment:"备注"`
Status string `json:"status" comment:"状态"` Status string `json:"status" comment:"状态" binding:"required" default:"1"`
common.ControlBy common.ControlBy
} }
+63 -5
View File
@@ -23,13 +23,12 @@ func (e *SysUser) GetSysUserPage(c *dto.SysUserSearch, p *actions.DataPermission
var err error var err error
var data models.SysUser var data models.SysUser
err = e.Orm.Model(&data). err = e.Orm.Debug().Preload("Dept").
Scopes( Scopes(
cDto.MakeCondition(c.GetNeedSearch()), cDto.MakeCondition(c.GetNeedSearch()),
cDto.Paginate(c.GetPageSize(), c.GetPageIndex()), cDto.Paginate(c.GetPageSize(), c.GetPageIndex()),
actions.Permission(data.TableName(), p), actions.Permission(data.TableName(), p),
). ).
Preload("Dept").
Find(list).Limit(-1).Offset(-1). Find(list).Limit(-1).Offset(-1).
Count(count).Error Count(count).Error
if err != nil { if err != nil {
@@ -43,7 +42,7 @@ func (e *SysUser) GetSysUserPage(c *dto.SysUserSearch, p *actions.DataPermission
func (e *SysUser) GetSysUser(d *dto.SysUserById, p *actions.DataPermission, model *models.SysUser) error { func (e *SysUser) GetSysUser(d *dto.SysUserById, p *actions.DataPermission, model *models.SysUser) error {
var data models.SysUser var data models.SysUser
err := e.Orm.Model(&data). err := e.Orm.Model(&data).Debug().
Scopes( Scopes(
actions.Permission(data.TableName(), p), actions.Permission(data.TableName(), p),
). ).
@@ -64,6 +63,17 @@ func (e *SysUser) GetSysUser(d *dto.SysUserById, p *actions.DataPermission, mode
func (e *SysUser) InsertSysUser(c *dto.SysUserControl) error { func (e *SysUser) InsertSysUser(c *dto.SysUserControl) error {
var err error var err error
var data models.SysUser var data models.SysUser
var i int64
err = e.Orm.Model(&data).Where("username = ?", c.Username).Count(&i).Error
if err != nil {
e.Log.Errorf("db error: %s", err)
return err
}
if i > 0 {
err := errors.New("用户名已存在!")
e.Log.Errorf("db error: %s", err)
return err
}
c.Generate(&data) c.Generate(&data)
err = e.Orm.Create(&data).Error err = e.Orm.Create(&data).Error
if err != nil { if err != nil {
@@ -97,6 +107,53 @@ func (e *SysUser) UpdateSysUser(c *dto.SysUserControl, p *actions.DataPermission
return nil return nil
} }
// UpdateSysUserStatus 更新用户状态
func (e *SysUser) UpdateSysUserStatus(c *dto.UpdateSysUserStatusReq, p *actions.DataPermission) error {
var err error
var model models.SysUser
db := e.Orm.Scopes(
actions.Permission(model.TableName(), p),
).First(&model, c.GetId())
if err = db.Error; err != nil {
e.Log.Errorf("Service UpdateSysUser error: %s", err)
return err
}
if db.RowsAffected == 0 {
return errors.New("无权更新该数据")
}
c.Generate(&model)
err = e.Orm.Save(&model).Error
if err != nil {
e.Log.Errorf("Service UpdateSysUser error: %s", err)
return err
}
return nil
}
// ResetSysUserPwd 重置用户密码
func (e *SysUser) ResetSysUserPwd(c *dto.ResetSysUserPwdReq, p *actions.DataPermission) error {
var err error
var model models.SysUser
db := e.Orm.Scopes(
actions.Permission(model.TableName(), p),
).First(&model, c.GetId())
if err = db.Error; err != nil {
e.Log.Errorf("At Service ResetSysUserPwd error: %s", err)
return err
}
if db.RowsAffected == 0 {
return errors.New("无权更新该数据")
}
c.Generate(&model)
err = e.Orm.Save(&model).Error
if err != nil {
e.Log.Errorf("At Service ResetSysUserPwd error: %s", err)
return err
}
return nil
}
// RemoveSysUser 删除SysUser // RemoveSysUser 删除SysUser
func (e *SysUser) RemoveSysUser(c *dto.SysUserById, p *actions.DataPermission) error { func (e *SysUser) RemoveSysUser(c *dto.SysUserById, p *actions.DataPermission) error {
var err error var err error
@@ -107,7 +164,7 @@ func (e *SysUser) RemoveSysUser(c *dto.SysUserById, p *actions.DataPermission) e
actions.Permission(data.TableName(), p), actions.Permission(data.TableName(), p),
).Delete(&data, c.GetId()) ).Delete(&data, c.GetId())
if err = db.Error; err != nil { if err = db.Error; err != nil {
e.Log.Errorf("Delete error: %s", err) e.Log.Errorf("Error found in RemoveSysUser : %s", err)
return err return err
} }
if db.RowsAffected == 0 { if db.RowsAffected == 0 {
@@ -128,7 +185,8 @@ func (e *SysUser) UpdateSysUserPwd(id int, oldPassword, newPassword string, p *a
err = e.Orm.Model(c). err = e.Orm.Model(c).
Scopes( Scopes(
actions.Permission(c.TableName(), p), actions.Permission(c.TableName(), p),
).Where(id).Select("UserId", "Password", "Salt").First(c).Error ).Select("UserId", "Password", "Salt").
First(c, id).Error
if err != nil { if err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) { if errors.Is(err, gorm.ErrRecordNotFound) {
return errors.New("无权更新该数据") return errors.New("无权更新该数据")