优化若干功能

This commit is contained in:
2026-09-09 17:02:29 +08:00
parent fef0233cc4
commit 2f238875e1
16 changed files with 609 additions and 68 deletions
+94
View File
@@ -195,6 +195,100 @@ func (c *BackendAuthController) GetCurrentUser() {
})
}
// GetCurrentUserProfile 当前登录用户的角色 / 部门 / 职位
// GET /backend/getCurrentUserProfile
// 返回 department / position(来自员工档案,按登录账号 + 租户匹配);
// 若均无,则回退到角色名(role_name)。
func (c *BackendAuthController) GetCurrentUserProfile() {
authHeader := c.Ctx.Request.Header.Get("Authorization")
if authHeader == "" {
c.serveJSON(map[string]interface{}{"code": 401, "msg": "未登录"})
return
}
authParts := strings.SplitN(authHeader, " ", 2)
if len(authParts) != 2 || authParts[0] != "Bearer" {
c.serveJSON(map[string]interface{}{"code": 401, "msg": "认证信息格式错误"})
return
}
claims, err := jwtutil.ParseToken(authParts[1])
if err != nil {
c.serveJSON(map[string]interface{}{"code": 401, "msg": "无效的token"})
return
}
if claims.UserType != "backend" && claims.UserType != "app" {
c.serveJSON(map[string]interface{}{"code": 403, "msg": "无权访问"})
return
}
var tenantUser models.SystemTenantUser
if err := models.Orm.QueryTable(new(models.SystemTenantUser)).
Filter("uid", claims.UserID).
Filter("tid", claims.TenantId).
One(&tenantUser); err != nil {
c.serveJSON(map[string]interface{}{"code": 401, "msg": "用户不存在"})
return
}
account := ""
if tenantUser.Account != nil {
account = strings.TrimSpace(*tenantUser.Account)
}
name := ""
if tenantUser.Name != nil {
name = strings.TrimSpace(*tenantUser.Name)
}
// 角色名:按 group_id 查询本租户下的租户角色(cid=2)
roleName := ""
if tenantUser.GroupID > 0 {
var role models.AdminRole
if err := models.Orm.QueryTable(new(models.AdminRole)).
Filter("id", tenantUser.GroupID).
Filter("cid", 2).
Filter("tenant_id", claims.TenantId).
One(&role); err == nil {
roleName = role.Name
}
}
// 部门 / 职位:来自员工档案,按账号 + 租户匹配
department := ""
position := ""
if account != "" {
var emp models.BackendEmployee
qs := models.Orm.QueryTable(new(models.BackendEmployee)).Filter("account", account)
if claims.TenantId > 0 {
qs = qs.Filter("tid", int(claims.TenantId))
}
if err := qs.One(&emp); err == nil {
if emp.Department != nil {
department = strings.TrimSpace(*emp.Department)
}
if emp.Position != nil {
position = strings.TrimSpace(*emp.Position)
}
}
}
// 员工档案的 department 字段存的是组织ID,需转换为组织名称展示
if department != "" {
orgNames := (&BackendEmployeeFileController{}).efOrgNameMap(int(claims.TenantId))
department = efOrgNameByID(orgNames, department)
}
c.serveJSON(map[string]interface{}{
"code": 200,
"msg": "success",
"data": map[string]interface{}{
"account": account,
"name": name,
"role_name": roleName,
"department": department,
"position": position,
},
})
}
// SendLoginCode 发送 backend 登录验证码
func (c *BackendAuthController) SendLoginCode() {
var req struct {