更新各项内容
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
package controllers
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
"server/models"
|
||||
"server/pkg/jwtutil"
|
||||
)
|
||||
|
||||
// CRM 客户 / 供应商的删除权限规则:
|
||||
// 1. 平台管理员(UserType=platform)可删除;
|
||||
// 2. 租户管理员(绑定「租户管理员」角色,或未分配角色/角色未配置权限等既有"全权限"情形)可删除;
|
||||
// 3. 记录的创建人可删除自己创建的记录。
|
||||
// 其余用户一律禁止删除。删除本身为软删除(置 delete_time)。
|
||||
|
||||
// canDeleteCrmRecord 判断当前用户是否有权删除指定记录。
|
||||
// createUserID 为记录的创建人用户ID(历史数据可能为空)。
|
||||
func canDeleteCrmRecord(claims *jwtutil.Claims, createUserID string) bool {
|
||||
if claims == nil {
|
||||
return false
|
||||
}
|
||||
// 平台管理员
|
||||
if claims.UserType == "platform" {
|
||||
return true
|
||||
}
|
||||
// 创建人本人
|
||||
uid := fmt.Sprintf("%d", claims.UserID)
|
||||
if createUserID != "" && createUserID == uid {
|
||||
return true
|
||||
}
|
||||
// 租户管理员 / 具备全权限的租户用户
|
||||
return isTenantAdmin(claims.UserID, claims.TenantId)
|
||||
}
|
||||
|
||||
// isTenantAdmin 判断用户在指定租户内是否具备管理员(全权限)身份。
|
||||
// 判定与既有权限约定保持一致:
|
||||
// - 未分配角色(group_id=0)视为全权限;
|
||||
// - 角色名为「租户管理员」视为管理员;
|
||||
// - 角色未配置 rights(空/空数组/null)视为全权限。
|
||||
func isTenantAdmin(userID int, tenantID int) bool {
|
||||
if tenantID <= 0 || models.Orm == nil {
|
||||
return false
|
||||
}
|
||||
var tu models.SystemTenantUser
|
||||
if err := models.Orm.QueryTable(new(models.SystemTenantUser)).
|
||||
Filter("uid", userID).
|
||||
Filter("tid", tenantID).
|
||||
Filter("delete_time__isnull", true).
|
||||
One(&tu); err != nil {
|
||||
return false
|
||||
}
|
||||
if tu.GroupID == 0 {
|
||||
return true
|
||||
}
|
||||
var role models.AdminRole
|
||||
if err := models.Orm.QueryTable(new(models.AdminRole)).
|
||||
Filter("id", tu.GroupID).
|
||||
Filter("cid", 2).
|
||||
Filter("tenant_id", tenantID).
|
||||
One(&role); err != nil {
|
||||
return false
|
||||
}
|
||||
if role.Name == "租户管理员" {
|
||||
return true
|
||||
}
|
||||
rights := ""
|
||||
if role.Rights != nil {
|
||||
rights = strings.TrimSpace(*role.Rights)
|
||||
}
|
||||
return rights == "" || rights == "[]" || rights == "null"
|
||||
}
|
||||
Reference in New Issue
Block a user