refactor: 移除未使用的 user_permission 表及权限加载逻辑
- 删除 UserPermission 模型与 xorm Sync2 注册 - 移除登录/鉴权时从 user_permission 加载授权的逻辑 - 应用列表查询去掉 user_permission 子查询,仅保留负责人和业务组条件 - SQL 导出文件删除建表语句,新增 drop_user_permission.sql 升级脚本
This commit is contained in:
@@ -37,7 +37,6 @@ func Init() error {
|
|||||||
new(model.AppConfig),
|
new(model.AppConfig),
|
||||||
new(model.AppConfigHistory),
|
new(model.AppConfigHistory),
|
||||||
new(model.User),
|
new(model.User),
|
||||||
new(model.UserPermission),
|
|
||||||
new(model.ClientInstance),
|
new(model.ClientInstance),
|
||||||
); err != nil {
|
); err != nil {
|
||||||
return err
|
return err
|
||||||
|
|||||||
@@ -45,10 +45,10 @@ func (h *AppHandler) List(c *gin.Context) {
|
|||||||
|
|
||||||
if userInfo.IsGroupAdmin() && userInfo.GroupId != nil {
|
if userInfo.IsGroupAdmin() && userInfo.GroupId != nil {
|
||||||
// 组管理员:本组应用 + 自己是负责人的应用
|
// 组管理员:本组应用 + 自己是负责人的应用
|
||||||
query = query.And("(group_id = ? OR FIND_IN_SET('" + userIdStr + "', owner_ids) > 0 OR id IN (SELECT app_id FROM user_permission WHERE user_id = ?))", *userInfo.GroupId, userId)
|
query = query.And("(group_id = ? OR FIND_IN_SET('" + userIdStr + "', owner_ids) > 0)", *userInfo.GroupId)
|
||||||
} else {
|
} else {
|
||||||
// 普通用户:自己是负责人的应用 + 被授权的应用
|
// 普通用户:自己是负责人的应用
|
||||||
query = query.And("(FIND_IN_SET('" + userIdStr + "', owner_ids) > 0 OR id IN (SELECT app_id FROM user_permission WHERE user_id = ?))", userId)
|
query = query.And("FIND_IN_SET('" + userIdStr + "', owner_ids) > 0")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -60,10 +60,10 @@ func (h *AppHandler) List(c *gin.Context) {
|
|||||||
|
|
||||||
if userInfo.IsGroupAdmin() && userInfo.GroupId != nil {
|
if userInfo.IsGroupAdmin() && userInfo.GroupId != nil {
|
||||||
// 组管理员:本组应用 + 自己是负责人的应用
|
// 组管理员:本组应用 + 自己是负责人的应用
|
||||||
whereClause += " AND (group_id = " + strconv.Itoa(*userInfo.GroupId) + " OR FIND_IN_SET('" + userIdStr + "', owner_ids) > 0 OR id IN (SELECT app_id FROM user_permission WHERE user_id = " + strconv.Itoa(userId) + "))"
|
whereClause += " AND (group_id = " + strconv.Itoa(*userInfo.GroupId) + " OR FIND_IN_SET('" + userIdStr + "', owner_ids) > 0)"
|
||||||
} else {
|
} else {
|
||||||
// 普通用户:自己是负责人的应用 + 被授权的应用
|
// 普通用户:自己是负责人的应用
|
||||||
whereClause += " AND (FIND_IN_SET('" + userIdStr + "', owner_ids) > 0 OR id IN (SELECT app_id FROM user_permission WHERE user_id = " + strconv.Itoa(userId) + "))"
|
whereClause += " AND (FIND_IN_SET('" + userIdStr + "', owner_ids) > 0)"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if req.AppType != "" {
|
if req.AppType != "" {
|
||||||
|
|||||||
@@ -22,18 +22,6 @@ func (User) TableName() string {
|
|||||||
return "user"
|
return "user"
|
||||||
}
|
}
|
||||||
|
|
||||||
type UserPermission struct {
|
|
||||||
Id int `xorm:"int autoincr pk" json:"id"`
|
|
||||||
UserId int `xorm:"int" json:"userId"`
|
|
||||||
Env string `xorm:"varchar(16)" json:"env"`
|
|
||||||
AppId int `xorm:"int" json:"appId"`
|
|
||||||
Operate string `xorm:"varchar(8) default 'RW'" json:"operate"` // RO, RW
|
|
||||||
}
|
|
||||||
|
|
||||||
func (UserPermission) TableName() string {
|
|
||||||
return "user_permission"
|
|
||||||
}
|
|
||||||
|
|
||||||
type LoginUserInfo struct {
|
type LoginUserInfo struct {
|
||||||
Id string `json:"id"`
|
Id string `json:"id"`
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
|
|||||||
@@ -148,34 +148,6 @@ func (s *AuthService) loadPermissions(userInfo *model.LoginUserInfo, userId int)
|
|||||||
userInfo.GrantAppIds = append(userInfo.GrantAppIds, app.Id)
|
userInfo.GrantAppIds = append(userInfo.GrantAppIds, app.Id)
|
||||||
userInfo.GrantPermissons = append(userInfo.GrantPermissons, buildPermissionCode(app.Id, "RW"))
|
userInfo.GrantPermissons = append(userInfo.GrantPermissons, buildPermissionCode(app.Id, "RW"))
|
||||||
}
|
}
|
||||||
|
|
||||||
// load granted permissions
|
|
||||||
var perms []model.UserPermission
|
|
||||||
dao.Engine.Where("user_id = ?", userId).Find(&perms)
|
|
||||||
for _, p := range perms {
|
|
||||||
permCode := buildPermissionCode(p.AppId, p.Operate)
|
|
||||||
// avoid duplicate
|
|
||||||
found := false
|
|
||||||
for _, existing := range userInfo.GrantPermissons {
|
|
||||||
if existing == permCode {
|
|
||||||
found = true
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if !found {
|
|
||||||
userInfo.GrantPermissons = append(userInfo.GrantPermissons, permCode)
|
|
||||||
}
|
|
||||||
appIdFound := false
|
|
||||||
for _, id := range userInfo.GrantAppIds {
|
|
||||||
if id == p.AppId {
|
|
||||||
appIdFound = true
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if !appIdFound {
|
|
||||||
userInfo.GrantAppIds = append(userInfo.GrantAppIds, p.AppId)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func buildPermissionCode(appId int, operate string) string {
|
func buildPermissionCode(appId int, operate string) string {
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
-- 删除已废弃的用户应用授权表。
|
||||||
|
-- 权限现由 application.owner_ids(应用负责人)和业务组角色管理。
|
||||||
|
-- 已有环境升级时手动执行:mysql -u<user> -p <database> < sql/drop_user_permission.sql
|
||||||
|
|
||||||
|
DROP TABLE IF EXISTS `user_permission`;
|
||||||
@@ -4,15 +4,6 @@
|
|||||||
|
|
||||||
SET FOREIGN_KEY_CHECKS = 0;
|
SET FOREIGN_KEY_CHECKS = 0;
|
||||||
|
|
||||||
CREATE TABLE `user_permission` (
|
|
||||||
`id` int NOT NULL AUTO_INCREMENT,
|
|
||||||
`user_id` int DEFAULT NULL,
|
|
||||||
`env` varchar(16) DEFAULT NULL,
|
|
||||||
`app_id` int DEFAULT NULL,
|
|
||||||
`operate` varchar(8) DEFAULT 'RW',
|
|
||||||
PRIMARY KEY (`id`)
|
|
||||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb3;
|
|
||||||
|
|
||||||
CREATE TABLE `profile_extr_attr` (
|
CREATE TABLE `profile_extr_attr` (
|
||||||
`profile` varchar(32) NOT NULL,
|
`profile` varchar(32) NOT NULL,
|
||||||
`attr_name` varchar(50) NOT NULL,
|
`attr_name` varchar(50) NOT NULL,
|
||||||
|
|||||||
Reference in New Issue
Block a user