feat:完善项目信息

This commit is contained in:
henry
2022-01-07 16:12:43 +08:00
parent 657fdc5750
commit 2bf3c01702
21 changed files with 379 additions and 129 deletions

View File

@ -10,7 +10,42 @@ import (
type Auth struct{}
type authForm struct {
ParentID string `json:"parent_id" form:"parent_id"`
Kind int `json:"kind" form:"kind" binding:"required"`
Name string `json:"name" form:"name" binding:"required"`
Auth string `json:"auth" form:"auth" binding:"required"`
Sort int `json:"sort" form:"sort"`
Remark string `json:"remark" form:"remark"`
}
func (*Auth) Index(c *gin.Context) {
data, err := auth.NewInstance()(api.GetSession()(c).(*session.Admin)).Index()
api.APIResponse(err, data)(c)
}
func (*Auth) Add(c *gin.Context) {
form := &struct {
RoleID string `json:"role_id" form:"role_id" binding:"required"`
AuthIDs []string `json:"auth_ids" form:"auth_ids" binding:"required"`
}{}
if err := api.Bind(form)(c); err != nil {
api.APIFailure(err.(error))(c)
return
}
}
func (*Auth) Edit(c *gin.Context) {
form := &struct {
RoleID string `json:"role_id" form:"role_id" binding:"required"`
AuthIDs []string `json:"auth_ids" form:"auth_ids" binding:"required"`
}{}
if err := api.Bind(form)(c); err != nil {
api.APIFailure(err.(error))(c)
return
}
}
func (*Auth) Delete(c *gin.Context) {
}

View File

@ -4,7 +4,6 @@ import (
"SciencesServer/app/api/admin/controller/department"
"SciencesServer/app/basic/api"
"SciencesServer/app/session"
"github.com/gin-gonic/gin"
)
@ -13,14 +12,21 @@ type Department struct{}
type departmentForm struct {
ParentID string `json:"parent_id" form:"parent_id"`
Name string `json:"name" form:"name" binding:"required"`
Contact string `json:"contact" form:"contact_title"`
Contact string `json:"contact" form:"contact"`
ContactMobile string `json:"contact_mobile" form:"contact_mobile"`
Status int `json:"status" form:"status" binding:"required"`
Remark string `json:"remark" form:"remark"`
}
func (a *Department) Index(c *gin.Context) {
data, err := department.NewInstance()(api.GetSession()(c).(*session.Admin)).Index()
form := &struct {
FilterID string `json:"filter_id" form:"filter_id"`
}{}
if err := api.Bind(form)(c); err != nil {
api.APIFailure(err.(error))(c)
return
}
data, err := department.NewInstance()(api.GetSession()(c).(*session.Admin)).Index((&api.IDStringForm{ID: form.FilterID}).Convert())
api.APIResponse(err, data)(c)
}

View File

@ -19,7 +19,7 @@ type (
Link string `json:"path" form:"path"`
Component string `json:"component" form:"component"`
Icon string `json:"icon" form:"icon"`
Auth int `json:"auth" form:"auth"`
Auth string `json:"auth" form:"auth"`
Sort int `json:"sort" form:"sort"`
IsCache int `json:"is_cache" form:"is_cache"`
Hidden int `json:"hidden" form:"hidden"`

View File

@ -107,38 +107,48 @@ func (a *Tenant) MemberBind(c *gin.Context) {
func (a *Tenant) Menu(c *gin.Context) {
form := &struct {
TenantID uint64 `json:"tenant_id" form:"tenant_id" binding:"required"`
TenantID string `json:"tenant_id" form:"tenant_id" binding:"required"`
}{}
if err := api.Bind(form)(c); err != nil {
api.APIFailure(err.(error))(c)
return
}
data, err := tenant.NewMenu()(api.GetSession()(c).(*session.Admin)).List(form.TenantID)
data, err := tenant.NewMenu()(api.GetSession()(c).(*session.Admin)).List((&api.IDStringForm{ID: form.TenantID}).Convert())
api.APIResponse(err, data)(c)
}
func (a *Tenant) MenuBind(c *gin.Context) {
form := &struct {
TenantID uint64 `json:"tenant_id" form:"tenant_id" binding:"required"`
MenuIDs []uint64 `json:"menu_ids" form:"menu_ids" binding:"required"`
TenantID string `json:"tenant_id" form:"tenant_id" binding:"required"`
MenuIDs []string `json:"menu_ids" form:"menu_ids" binding:"required"`
}{}
if err := api.Bind(form)(c); err != nil {
api.APIFailure(err.(error))(c)
return
}
err := tenant.NewMenu()(api.GetSession()(c).(*session.Admin)).Bind(form.TenantID, form.MenuIDs)
menuIDs := make([]uint64, 0)
for _, v := range form.MenuIDs {
menuIDs = append(menuIDs, (&api.IDStringForm{ID: v}).Convert())
}
err := tenant.NewMenu()(api.GetSession()(c).(*session.Admin)).Bind((&api.IDStringForm{ID: form.TenantID}).Convert(), menuIDs)
api.APIResponse(err)(c)
}
func (a *Tenant) AuthBind(c *gin.Context) {
form := &struct {
TenantID uint64 `json:"tenant_id" form:"tenant_id" binding:"required"`
AuthIDs []uint64 `json:"auth_ids" form:"auth_ids" binding:"required"`
TenantID string `json:"tenant_id" form:"tenant_id" binding:"required"`
AuthIDs []string `json:"auth_ids" form:"auth_ids" binding:"required"`
}{}
if err := api.Bind(form)(c); err != nil {
api.APIFailure(err.(error))(c)
return
}
err := tenant.NewAuth()(api.GetSession()(c).(*session.Admin)).Bind(form.TenantID, form.AuthIDs)
authIDs := make([]uint64, 0)
for _, v := range form.AuthIDs {
authIDs = append(authIDs, (&api.IDStringForm{ID: v}).Convert())
}
err := tenant.NewAuth()(api.GetSession()(c).(*session.Admin)).Bind((&api.IDStringForm{ID: form.TenantID}).Convert(), authIDs)
api.APIResponse(err)(c)
}

View File

@ -11,12 +11,14 @@ import (
type User struct{}
type userForm struct {
Account string `json:"account" form:"account" binding:"required"`
Account string `json:"account" form:"account"`
Name string `json:"name" form:"name" binding:"required"`
Mobile string `json:"mobile" form:"mobile" binding:"required"`
Gender int `json:"gender" form:"gender" binding:"required"`
Status int `json:"status" form:"status" binding:"required"`
DepartmentID string `json:"department_id" form:"department_id"`
RoleIDs []string `json:"role_ids" form:"role_ids"`
Email string `json:"email" form:"email"`
Remark string `json:"remark" form:"remark"`
}
@ -81,8 +83,8 @@ func (a *User) Add(c *gin.Context) {
return
}
err := user.NewInstance()(api.GetSession()(c).(*session.Admin)).Add(&user.InstanceForm{
Account: form.Account, Name: form.Name, Mobile: form.Mobile, Password: form.Password,
Remark: form.Remark, Gender: form.Gender, DepartmentID: form.departmentInfo(), RoleIDs: form.RoleInfo(),
Account: form.Account, Name: form.Name, Mobile: form.Mobile, Password: form.Password, Status: form.Status,
Email: form.Email, Remark: form.Remark, Gender: form.Gender, DepartmentID: form.departmentInfo(), RoleIDs: form.RoleInfo(),
})
api.APIResponse(err)(c)
}
@ -97,8 +99,8 @@ func (a *User) Edit(c *gin.Context) {
return
}
err := user.NewInstance()(api.GetSession()(c).(*session.Admin)).Edit(&user.InstanceForm{
ID: form.Convert(), Account: form.Account, Name: form.Name, Mobile: form.Mobile,
Remark: form.Remark, Gender: form.Gender, DepartmentID: form.departmentInfo(), RoleIDs: form.RoleInfo(),
ID: form.Convert(), Account: form.Account, Name: form.Name, Mobile: form.Mobile, Status: form.Status,
Email: form.Email, Remark: form.Remark, Gender: form.Gender, DepartmentID: form.departmentInfo(), RoleIDs: form.RoleInfo(),
})
api.APIResponse(err)(c)
}
@ -107,7 +109,7 @@ func (a *User) Password(c *gin.Context) {
form := &struct {
api.IDStringForm
Password string `json:"password" form:"password" binding:"required"`
RepeatPwd string `json:"repeat_pwd" form:"repeat_pwd" binding:"required"`
RepeatPwd string `json:"repeat_pwd" form:"repeat_pwd"`
}{}
if err := api.Bind(form)(c); err != nil {
api.APIFailure(err.(error))(c)

View File

@ -4,19 +4,26 @@ import (
"SciencesServer/app/api/admin/model"
model2 "SciencesServer/app/common/model"
"SciencesServer/app/session"
"errors"
)
type Instance struct{ *session.Admin }
type InstanceHandle func(session *session.Admin) *Instance
type InstanceParams struct {
ID, ParentID uint64
Kind, Sort int
Name, Auth, Remark string
}
// Index 列表信息
func (c *Instance) Index() ([]*Tree, error) {
mSysAuth := model.NewSysAuth()
where := []*model2.ModelWhereOrder{
&model2.ModelWhereOrder{Order: model2.NewOrder("sort", model2.OrderModeToAsc)},
&model2.ModelWhereOrder{Order: model2.NewOrder("parent_id", model2.OrderModeToAsc)},
&model2.ModelWhereOrder{Order: model2.NewOrder("sort", model2.OrderModeToDesc)},
}
out := make([]*model2.SysAuth, 0)
@ -26,6 +33,44 @@ func (c *Instance) Index() ([]*Tree, error) {
return tree(out, 0), nil
}
// Form 数据操作
func (c *Instance) Form(params *InstanceParams) error {
mSysAuth := model.NewSysAuth()
if params.ID > 0 {
mSysAuth.ID = params.ID
if isExist, err := model2.First(mSysAuth.SysAuth); err != nil {
return err
} else if !isExist {
return errors.New("操作错误,权限信息不存在")
}
}
mSysAuth.ParentID = params.ParentID
mSysAuth.Kind = model2.SysAuthKind(params.Kind)
mSysAuth.Name = params.Name
mSysAuth.Auth = params.Auth
mSysAuth.Sort = params.Sort
mSysAuth.Remark = params.Remark
if mSysAuth.ID > 0 {
return model2.Updates(mSysAuth.SysAuth, mSysAuth.SysAuth)
}
return model2.Create(mSysAuth.SysAuth)
}
func (c *Instance) Delete(id uint64) error {
mSysAuth := model.NewSysAuth()
mSysAuth.ID = id
err := model2.Delete(mSysAuth.SysAuth)
if err != nil {
return err
}
return nil
}
func NewInstance() InstanceHandle {
return func(session *session.Admin) *Instance {
return &Instance{Admin: session}

View File

@ -49,18 +49,26 @@ func (c *Instance) tree(src []*model2.SysDepartment, parentID uint64) []*Instanc
return out
}
func (c *Instance) Index() ([]*InstanceTreeInfo, error) {
func (c *Instance) Index(filterID uint64) ([]*InstanceTreeInfo, error) {
mSysDepartment := model.NewSysDepartment()
out := make([]*model2.SysDepartment, 0)
if err := model2.Scan(mSysDepartment.SysDepartment, &out, &model2.ModelWhereOrder{
Where: model2.NewWhere("tenant_id", c.TenantID),
Order: model2.NewOrder("parent_id", model2.OrderModeToAsc)},
where := []*model2.ModelWhereOrder{
&model2.ModelWhereOrder{
Order: model2.NewOrder("id", model2.OrderModeToDesc)}); err != nil {
Where: model2.NewWhere("tenant_id", c.TenantID),
Order: model2.NewOrder("parent_id", model2.OrderModeToAsc)},
&model2.ModelWhereOrder{
Order: model2.NewOrder("id", model2.OrderModeToAsc)},
}
if filterID > 0 {
where = append(where, &model2.ModelWhereOrder{Where: model2.NewWhereCondition("id", "!=", filterID)},
&model2.ModelWhereOrder{Where: model2.NewWhereCondition("parent_id", "!=", filterID)})
}
if err := model2.Scan(mSysDepartment.SysDepartment, &out, where...); err != nil {
return nil, err
}
return c.tree(out, 0), nil
}
@ -73,7 +81,7 @@ func (c *Instance) Select() ([]*InstanceTreeInfo, error) {
Where: model2.NewWhere("tenant_id", c.TenantID),
Order: model2.NewOrder("parent_id", model2.OrderModeToAsc)}, &model2.ModelWhereOrder{
Where: model2.NewWhere("status", 1),
Order: model2.NewOrder("id", model2.OrderModeToDesc)}); err != nil {
Order: model2.NewOrder("id", model2.OrderModeToAsc)}); err != nil {
return nil, err
}
return c.tree(out, 0), nil

View File

@ -16,11 +16,11 @@ type InstanceHandle func(session *session.Admin) *Instance
type (
// InstanceParams 菜单参数
InstanceParams struct {
ID, ParentID uint64
Kind, Auth int
Name, Link, Component, Icon string
Sort, IsCache, IsHidden, Status int
Remark string
ID, ParentID uint64
Kind int
Name, Link, Auth, Component, Icon string
Sort, IsCache, IsHidden, Status int
Remark string
}
)
@ -50,7 +50,7 @@ func (c *Instance) Form(params *InstanceParams) error {
IsHidden: model2.SysMenuHiddenStatus(params.IsHidden),
Icon: params.Icon,
},
Auth: model2.SysMenuAuth(params.Auth),
Auth: params.Auth,
Sort: params.Sort,
Status: model2.SysMenuStatus(params.Status),
Remark: params.Remark,
@ -72,7 +72,7 @@ func (c *Instance) Form(params *InstanceParams) error {
out.Link = params.Link
out.Component = params.Component
out.Icon = params.Icon
out.Auth = model2.SysMenuAuth(params.Auth)
out.Auth = params.Auth
out.IsCache = model2.SysMenuCacheStatus(params.IsCache)
out.IsHidden = model2.SysMenuHiddenStatus(params.IsHidden)
out.Sort = params.Sort

View File

@ -25,7 +25,7 @@ type (
}
// InstanceBasicInfo 角色基本信息
InstanceBasicInfo struct {
ID uint64 `json:"id"`
ID string `json:"id"`
Name string `json:"name"`
}
)
@ -77,12 +77,20 @@ func (c *Instance) Select() ([]*InstanceBasicInfo, error) {
Order: model2.NewOrder("id", model2.OrderModeToDesc),
},
}
out := make([]*InstanceBasicInfo, 0)
out := make([]*model2.SysRole, 0)
if err := model2.Scan(mSysRole.SysRole, &out, where...); err != nil {
return nil, err
}
return out, nil
list := make([]*InstanceBasicInfo, 0)
for _, v := range out {
list = append(list, &InstanceBasicInfo{
ID: v.GetEncodeID(),
Name: v.Name,
})
}
return list, nil
}
// Form 数据操作
@ -152,11 +160,10 @@ func (c *Instance) Delete(id uint64) error {
return err
}
go utils.TryCatch(func() {
permission := service.NewPermission(
if _, err = service.NewPermission(
service.WithAuthTenant(fmt.Sprintf("%d", mSysRole.TenantID)),
service.WithAuthRoles([]string{fmt.Sprintf("%d", id)}),
)
if _, err = permission.RemoveRolePolicy(); err != nil {
).RemoveSingleRolePolicy(); err != nil {
logger.ErrorF("Casbin 删除租户【%d】下角色【%d】权限信息错误%v", mSysRole.TenantID, id, err)
return
}

View File

@ -6,8 +6,6 @@ import (
model2 "SciencesServer/app/common/model"
"SciencesServer/app/session"
"SciencesServer/serve/orm"
"errors"
"gorm.io/gorm"
)
@ -24,16 +22,7 @@ func (c *Menu) Index(roleID uint64) ([]*menu2.TreeChecked, error) {
// Bind 绑定菜单
func (c *Menu) Bind(roleID uint64, menuIDs []uint64) error {
if len(menuIDs) > 0 {
var count int64
mSysMenu := model.NewSysMenu()
if err := model2.Count(mSysMenu.SysMenu, &count, model2.NewWhereIn("id", menuIDs),
model2.NewWhere("auth", model2.SysMenuAuthForSystem)); err != nil {
return err
} else if count > 0 {
return errors.New("不可设置超管菜单")
}
}
mSysRoleMenu := model.NewSysRoleMenu()
@ -54,9 +43,7 @@ func (c *Menu) Bind(roleID uint64, menuIDs []uint64) error {
if _, has := mark[v]; has {
continue
}
menus = append(menus, &model2.SysRoleMenu{
ModelTenant: model2.ModelTenant{TenantID: c.TenantID}, RoleID: roleID, MenuID: v,
})
menus = append(menus, &model2.SysRoleMenu{RoleID: roleID, MenuID: v})
mark[v] = v
}
if err = model2.Creates(mSysRoleMenu.SysRoleMenu, menus, tx); err != nil {

View File

@ -3,12 +3,11 @@ package tenant
import (
"SciencesServer/app/api/admin/controller/menu"
"SciencesServer/app/api/admin/model"
model3 "SciencesServer/app/api/enterprise/model"
model2 "SciencesServer/app/common/model"
"SciencesServer/app/service"
"SciencesServer/app/session"
"SciencesServer/serve/orm"
"errors"
"fmt"
"gorm.io/gorm"
)
@ -16,6 +15,16 @@ type Menu struct{ *session.Admin }
type MenuHandle func(session *session.Admin) *Menu
func (c *Menu) auth(tenantID string, roleIDs []string, request []*service.AuthRequest) error {
permission := service.NewPermission(
service.WithAuthTenant(tenantID),
service.WithAuthRoles(roleIDs),
service.WithAuthRequest(request),
)
_, err := permission.RemoveRolePolicies()
return err
}
// List 菜单列表
func (c *Menu) List(tenantID uint64) ([]*menu.TreeChecked, error) {
mSysMenu := model.NewSysMenu()
@ -24,60 +33,112 @@ func (c *Menu) List(tenantID uint64) ([]*menu.TreeChecked, error) {
// Bind 绑定菜单
func (c *Menu) Bind(tenantID uint64, menuIDs []uint64) error {
if len(menuIDs) > 0 {
var count int64
mSysMenu := model3.NewSysMenu()
if err := model2.Count(mSysMenu.SysMenu, &count, model2.NewWhereIn("id", menuIDs),
model2.NewWhere("auth", model2.SysMenuAuthForSystem)); err != nil {
return err
} else if count > 0 {
return errors.New("不可设置超管菜单")
}
}
// 查询菜单信息
mSysTenantMenu := model.NewSysTenantMenu()
// 当前租户的信息
out := make([]*model2.SysTenantMenu, 0)
err := model2.ScanFields(mSysTenantMenu.SysTenantMenu, &out, []string{"id", "menu_id"})
if err != nil {
return err
}
_menus := make(map[uint64]uint64, 0)
// 应保存的菜单
insertMenus := make([]*model2.SysTenantMenu, 0)
// 应删除的菜单
deleteMenuIDs := make([]uint64, 0)
for _, v := range menuIDs {
_menus[v] = v
}
return orm.GetDB().Transaction(func(tx *gorm.DB) error {
// TODO先全部删除后期考虑局部删除
err := model2.DeleteWhere(mSysTenantMenu.SysTenantMenu, []*model2.ModelWhere{model2.NewWhere("tenant_id", tenantID)}, tx)
// 无菜单信息
if len(_menus) <= 0 {
for _, v := range out {
deleteMenuIDs = append(deleteMenuIDs, v.MenuID)
}
goto NEXT
}
// 租户原本含有菜单信息
for _, v := range out {
_, has := _menus[v.MenuID]
if err != nil {
if !has {
deleteMenuIDs = append(deleteMenuIDs, v.MenuID)
continue
}
delete(_menus, v.MenuID)
}
for k := range _menus {
insertMenus = append(insertMenus, &model2.SysTenantMenu{
ModelTenant: model2.ModelTenant{TenantID: tenantID},
MenuID: k,
})
}
if len(insertMenus) > 0 {
if err = model2.Creates(mSysTenantMenu.SysTenantMenu, insertMenus); err != nil {
return err
}
}
NEXT:
// 删除操作
if len(deleteMenuIDs) <= 0 {
return nil
}
// 删除租户的菜单信息
if err = model2.DeleteWhere(mSysTenantMenu.SysTenantMenu, []*model2.ModelWhere{model2.NewWhere("tenant_id", tenantID),
model2.NewWhereIn("menu_id", deleteMenuIDs)}, tx); err != nil {
return err
}
// 租户角色的菜单
// 查询租户下所有角色信息
mSysRole := model.NewSysRole()
roleIDs := make([]uint64, 0)
if err = model2.Pluck(mSysRole.SysRole, "id", &roleIDs, model2.NewWhere("tenant_id", tenantID)); err != nil {
return err
}
// 删除租户下角色的菜单
mSysRoleMenu := model.NewSysRoleMenu()
if len(menuIDs) <= 0 {
if err = model2.DeleteWhere(mSysRoleMenu.SysRoleMenu, []*model2.ModelWhere{model2.NewWhere("tenant_id", tenantID)}, tx); err != nil {
if err = model2.DeleteWhere(mSysRoleMenu.SysRoleMenu, []*model2.ModelWhere{
model2.NewWhereIn("role_id", roleIDs), model2.NewWhereIn("menu_id", deleteMenuIDs),
}, tx); err != nil {
return err
}
return nil
}
menus := make([]*model2.SysTenantMenu, 0)
// 查询菜单信息,关闭角色的权限信息
mSysMenu := model.NewSysMenu()
mark := make(map[uint64]uint64, 0)
menus := make([]*model2.SysMenu, 0)
for _, v := range menuIDs {
if _, has := mark[v]; has {
if err = model2.ScanFields(mSysMenu.SysMenu, &menus, []string{"kind", "auth"},
&model2.ModelWhereOrder{Where: model2.NewWhereIn("id", deleteMenuIDs)}); err != nil {
return err
}
// 同步权限
_roleIDs := make([]string, 0)
for _, v := range roleIDs {
_roleIDs = append(_roleIDs, fmt.Sprintf("%d", v))
}
request := make([]*service.AuthRequest, 0)
for _, v := range menus {
if v.Kind == model2.SysMenuKindForCatalogue || v.Auth == "" {
continue
}
menus = append(menus, &model2.SysTenantMenu{
ModelTenant: model2.ModelTenant{TenantID: tenantID}, MenuID: v,
mSysMenu.Auth = v.Auth
request = append(request, &service.AuthRequest{
Url: mSysMenu.FilterAuth(),
Method: "*",
})
mark[v] = v
}
if err = model2.Creates(mSysTenantMenu.SysTenantMenu, menus, tx); err != nil {
return err
}
// 删除租户下角色不存在的菜单
if err = model2.DeleteWhere(mSysRoleMenu.SysRoleMenu, []*model2.ModelWhere{
model2.NewWhere("tenant_id", tenantID),
model2.NewWhereNotIn("menu_id", menuIDs),
}); err != nil {
return err
}
return nil
return c.auth(fmt.Sprintf("%d", tenantID), _roleIDs, request)
})
}

View File

@ -26,12 +26,15 @@ type (
InstanceInfo struct {
ID string `json:"id"`
InstanceUserInfo
Account string `json:"account"`
Gender model2.GenderKind `json:"gender"`
IsAdmin model2.SysUserAdministrator `json:"is_admin"`
Status model2.SysUserStatus `json:"status"`
Department *InstanceDepartmentInfo `json:"department"`
Role *InstanceRoleInfo `json:"role"`
CreatedAt time.Time `json:"created_at"`
//Role *InstanceRoleInfo `json:"role"`
RoleIDs []string `json:"role_ids"`
Remark string `json:"remark"`
CreatedAt time.Time `json:"created_at"`
}
// InstanceUserInfo 用户信息
InstanceUserInfo struct {
@ -55,11 +58,11 @@ type (
// InstanceForm 表单信息
type InstanceForm struct {
ID uint64
Account, Name, Mobile, Password, Remark string
Gender int
DepartmentID uint64
RoleIDs []uint64
ID uint64
Account, Name, Mobile, Password, Email, Remark string
Gender, Status int
DepartmentID uint64
RoleIDs []uint64
}
func (c *InstanceForm) sync(tx *gorm.DB, first bool, uid, tenantID uint64) error {
@ -171,7 +174,10 @@ func (c *Instance) Index(name, mobile string, departmentIDs []uint64, status, pa
InstanceUserInfo: InstanceUserInfo{
UID: v.UUIDString(), Avatar: v.Avatar, Name: v.Name, Email: v.Email, Mobile: v.Mobile,
},
Gender: v.Gender.Gender, IsAdmin: v.IsAdmin, Status: v.Status, CreatedAt: v.CreatedAt,
Account: v.Account, Gender: v.Gender.Gender, IsAdmin: v.IsAdmin, Status: v.Status, CreatedAt: v.CreatedAt,
//Role: make([]*InstanceRoleInfo, 0),
RoleIDs: make([]string, 0),
Remark: v.Remark,
}
if v.DepartmentID > 0 {
@ -188,11 +194,11 @@ func (c *Instance) Index(name, mobile string, departmentIDs []uint64, status, pa
obj.ID = utils.StringToUnit64(v)
roleIDs = append(roleIDs, obj.GetEncodeID())
}
roles := &InstanceRoleInfo{
IDs: roleIDs,
Names: strings.Split(v.RoleNames, "&&"),
}
data.Role = roles
//roles := &InstanceRoleInfo{
// IDs: roleIDs,
//Names: strings.Split(v.RoleNames, "&&"),
//}
data.RoleIDs = roleIDs
}
list = append(list, data)
}
@ -201,7 +207,7 @@ func (c *Instance) Index(name, mobile string, departmentIDs []uint64, status, pa
// Add 添加用户
func (c *Instance) Add(params *InstanceForm) error {
if utils.ValidateMobile(params.Mobile) {
if !utils.ValidateMobile(params.Mobile) {
return errors.New("操作错误,手机号码格式错误")
}
mSysUser := model.NewSysUser()
@ -213,15 +219,18 @@ func (c *Instance) Add(params *InstanceForm) error {
if err != nil {
return err
} else if count > 0 {
return errors.New("操作错误,当前手机号码已注册")
}
return orm.GetDB().Transaction(func(tx *gorm.DB) error {
mSysUser.TenantID = c.TenantID
mSysUser.Account = params.Account
mSysUser.Name = params.Name
mSysUser.Mobile = params.Mobile
mSysUser.Email = params.Email
mSysUser.Gender.Gender = model2.GenderKind(params.Gender)
mSysUser.Password = params.Password
mSysUser.Status = model2.SysUserStatus(params.Status)
mSysUser.Remark = params.Remark
if err = model2.Create(mSysUser.SysUser, tx); err != nil {
@ -250,7 +259,7 @@ func (c *Instance) Edit(params *InstanceForm) error {
return errors.New("操作错误,无权限操作")
}
if mSysUser.Mobile != params.Mobile {
if utils.ValidateMobile(params.Mobile) {
if !utils.ValidateMobile(params.Mobile) {
return errors.New("操作错误,手机号码格式错误")
}
var count int64
@ -263,8 +272,8 @@ func (c *Instance) Edit(params *InstanceForm) error {
}
mSysUser.Mobile = params.Mobile
}
mSysUser.Account = params.Account
mSysUser.Name = params.Name
mSysUser.Email = params.Email
mSysUser.Gender.Gender = model2.GenderKind(params.Gender)
mSysUser.Remark = params.Remark
@ -280,10 +289,11 @@ func (c *Instance) Edit(params *InstanceForm) error {
}
func (c *Instance) Password(id uint64, password, repeatPwd string) error {
if password != repeatPwd {
return errors.New("操作错误,两次密码输入不一致")
}
//if password != repeatPwd {
// return errors.New("操作错误,两次密码输入不一致")
//}
mSysUser := model.NewSysUser()
mSysUser.ID = id
isExist, err := model2.FirstField(mSysUser.SysUser, []string{"id", "uuid", "is_admin"})

View File

@ -4,6 +4,7 @@ import (
"SciencesServer/app/common/model"
"SciencesServer/serve/orm"
"fmt"
"strings"
)
type SysMenu struct {
@ -16,6 +17,10 @@ type SysMenuScene struct {
SceneID uint64 `json:"scene_id"` // 场景(租户,角色)
}
func (m *SysMenu) FilterAuth() string {
return "/" + strings.ReplaceAll(m.Auth, ":", "/")
}
// Recursion 递归查询子菜单
func (m *SysMenu) Recursion(id uint64) {
//SELECT

View File

@ -38,7 +38,8 @@ func (m *SysUser) GetByAccountOrMobile(account string, tenantID uint64) (bool, e
db := orm.GetDB().Table(m.TableName()).
Select("id", "uuid", "tenant_id", "name", "mobile", "password", "salt", "is_admin", "status").
Where("tenant_id = ?", tenantID).
Where("(account = ? OR mobile = ?)", account, account).
//Where("(email = ? OR mobile = ?)", account, account).
Where("mobile = ?", account).
Where("is_deleted = ?", model.DeleteStatusForNot)
if err := db.First(m.SysUser).Error; err != nil {
@ -50,6 +51,23 @@ func (m *SysUser) GetByAccountOrMobile(account string, tenantID uint64) (bool, e
return true, nil
}
func (m *SysUser) CheckByAccountOrMobile(account string, tenantID uint64) (bool, error) {
db := orm.GetDB().Table(m.TableName()).
Where("tenant_id = ?", tenantID).
Where("(account = ? OR mobile = ?)", account, account).
Where("is_deleted = ?", model.DeleteStatusForNot)
var count int64
if err := db.Count(&count).Error; err != nil {
if errors.Is(err, gorm.ErrRecordNotFound) {
return false, nil
}
return false, err
}
return true, nil
}
// Users 用户信息
func (m *SysUser) Users(page, pageSize int, count *int64, where ...*model.ModelWhere) ([]*SysUserInfo, error) {
db := orm.GetDB().Table(m.TableName()+" AS u").