add: multi-tenant
This commit is contained in:
@@ -16,7 +16,7 @@ import (
|
||||
// 实例化数据层 SysUserImpl 结构体
|
||||
var NewSysUserImpl = &SysUserImpl{
|
||||
selectSql: `select
|
||||
u.user_id, u.dept_id, u.user_name, u.nick_name, u.user_type, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,
|
||||
u.user_id, u.dept_id, u.tenant_id, u.user_name, u.nick_name, u.user_type, u.email, u.avatar, u.phonenumber, u.password, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark,
|
||||
d.dept_id, d.parent_id, d.ancestors, d.dept_name, d.order_num, d.leader, d.status as dept_status,
|
||||
r.role_id, r.role_name, r.role_key, r.role_sort, r.data_scope, r.status as role_status
|
||||
from sys_user u
|
||||
@@ -27,6 +27,7 @@ var NewSysUserImpl = &SysUserImpl{
|
||||
sysUserMap: map[string]string{
|
||||
"user_id": "UserID",
|
||||
"dept_id": "DeptID",
|
||||
"tenant_id": "TenantID",
|
||||
"user_name": "UserName",
|
||||
"nick_name": "NickName",
|
||||
"user_type": "UserType",
|
||||
@@ -56,6 +57,17 @@ var NewSysUserImpl = &SysUserImpl{
|
||||
"dept_status": "Status",
|
||||
},
|
||||
|
||||
sysTenantMap: map[string]string{
|
||||
"tenant_id": "TenantID",
|
||||
"parent_id": "ParentID",
|
||||
"Tenant_name": "TenantName",
|
||||
"ancestors": "Ancestors",
|
||||
"order_num": "OrderNum",
|
||||
"tenancy_type": "TenancyType",
|
||||
"tenancy_key": "TenancyKey",
|
||||
"tenant_status": "Status",
|
||||
},
|
||||
|
||||
sysRoleMap: map[string]string{
|
||||
"role_id": "RoleID",
|
||||
"role_name": "RoleName",
|
||||
@@ -74,6 +86,8 @@ type SysUserImpl struct {
|
||||
sysUserMap map[string]string
|
||||
// 用户部门实体映射 一对一
|
||||
sysDeptMap map[string]string
|
||||
// 用户租户实体映射 一对一
|
||||
sysTenantMap map[string]string
|
||||
// 用户角色实体映射 一对多
|
||||
sysRoleMap map[string]string
|
||||
}
|
||||
@@ -85,6 +99,7 @@ func (r *SysUserImpl) convertResultRows(rows []map[string]any) []model.SysUser {
|
||||
for _, row := range rows {
|
||||
sysUser := model.SysUser{}
|
||||
sysDept := model.SysDept{}
|
||||
sysTenant := model.SysTenant{}
|
||||
sysRole := model.SysRole{}
|
||||
sysUser.Roles = []model.SysRole{}
|
||||
|
||||
@@ -95,12 +110,16 @@ func (r *SysUserImpl) convertResultRows(rows []map[string]any) []model.SysUser {
|
||||
if keyMapper, ok := r.sysDeptMap[key]; ok {
|
||||
repo.SetFieldValue(&sysDept, keyMapper, value)
|
||||
}
|
||||
if keyMapper, ok := r.sysTenantMap[key]; ok {
|
||||
repo.SetFieldValue(&sysTenant, keyMapper, value)
|
||||
}
|
||||
if keyMapper, ok := r.sysRoleMap[key]; ok {
|
||||
repo.SetFieldValue(&sysRole, keyMapper, value)
|
||||
}
|
||||
}
|
||||
|
||||
sysUser.Dept = sysDept
|
||||
sysUser.Tenant = sysTenant
|
||||
if sysRole.RoleKey != "" {
|
||||
sysUser.Roles = append(sysUser.Roles, sysRole)
|
||||
}
|
||||
@@ -127,6 +146,7 @@ func (r *SysUserImpl) SelectUserPage(query map[string]any, dataScopeSQL string)
|
||||
selectUserTotalSql := `select count(distinct u.user_id) as 'total'
|
||||
from sys_user u
|
||||
left join sys_dept d on u.dept_id = d.dept_id
|
||||
left join sys_tenant t on u.tenant_id = t.tenant_id
|
||||
left join sys_user_role ur on u.user_id = ur.user_id
|
||||
left join sys_role r on r.role_id = ur.role_id`
|
||||
|
||||
@@ -171,6 +191,12 @@ func (r *SysUserImpl) SelectUserPage(query map[string]any, dataScopeSQL string)
|
||||
params = append(params, v)
|
||||
}
|
||||
|
||||
if v, ok := query["tenantId"]; ok && v != "" {
|
||||
conditions = append(conditions, "(u.tenant_id = ? or u.tenant_id in ( select n.tenant_id from sys_tenant n where find_in_set(?, ancestors) ))")
|
||||
params = append(params, v)
|
||||
params = append(params, v)
|
||||
}
|
||||
|
||||
// 构建查询条件语句
|
||||
whereSql := " where u.del_flag = '0' and u.user_id != '1' "
|
||||
if len(conditions) > 0 {
|
||||
@@ -310,9 +336,10 @@ func (r *SysUserImpl) SelectAllocatedPage(query map[string]any, dataScopeSQL str
|
||||
// SelectUserList 根据条件查询用户列表
|
||||
func (r *SysUserImpl) SelectUserList(sysUser model.SysUser, dataScopeSQL string) []model.SysUser {
|
||||
selectUserSql := `select
|
||||
u.user_id, u.dept_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader
|
||||
u.user_id, u.dept_id, u.tenant_id, u.nick_name, u.user_name, u.email, u.avatar, u.phonenumber, u.sex, u.status, u.del_flag, u.login_ip, u.login_date, u.create_by, u.create_time, u.remark, d.dept_name, d.leader
|
||||
from sys_user u
|
||||
left join sys_dept d on u.dept_id = d.dept_id`
|
||||
left join sys_dept d on u.dept_id = d.dept_id
|
||||
left join sys_tenant d on u.tenant_id = t.tenant_id`
|
||||
|
||||
// 查询条件拼接
|
||||
var conditions []string
|
||||
@@ -390,6 +417,9 @@ func (r *SysUserImpl) InsertUser(sysUser model.SysUser) string {
|
||||
if sysUser.DeptID != "" {
|
||||
params["dept_id"] = sysUser.DeptID
|
||||
}
|
||||
if sysUser.TenantID != "" {
|
||||
params["tenant_id"] = sysUser.TenantID
|
||||
}
|
||||
if sysUser.UserName != "" {
|
||||
params["user_name"] = sysUser.UserName
|
||||
}
|
||||
@@ -460,6 +490,9 @@ func (r *SysUserImpl) UpdateUser(sysUser model.SysUser) int64 {
|
||||
if sysUser.DeptID != "" {
|
||||
params["dept_id"] = sysUser.DeptID
|
||||
}
|
||||
if sysUser.TenantID != "" {
|
||||
params["tenant_id"] = sysUser.TenantID
|
||||
}
|
||||
if sysUser.UserName != "" {
|
||||
params["user_name"] = sysUser.UserName
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user