fix: (rbac) login set role map

This commit is contained in:
xushuhui 2022-04-25 10:24:05 +08:00
parent e8b57f369a
commit 2593d453e9
2 changed files with 33 additions and 20 deletions

View File

@ -83,21 +83,7 @@ func authenticateAdmin(username string, password string) (user Account, err erro
return user, nil
}
func authorize(user Account) (m map[string]interface{}, err error) {
token := jwt.NewWithClaims(jwt.SigningMethodHS256, UserClaims{
User: &User{
Username: user.Username,
UserId: user.ID,
Roles: []string{"admin"},
},
RegisteredClaims: &jwt.RegisteredClaims{
ExpiresAt: jwt.NewNumericDate(time.Now().Add(24 * time.Hour)),
},
})
tokenString, err := token.SignedString([]byte(Secret))
if err != nil {
return
}
var roles, privilege []string
if user.Username == "admin" {
roles = append(roles, "admin")
@ -109,9 +95,29 @@ func authorize(user Account) (m map[string]interface{}, err error) {
r, _ := GetRole(v.Id)
privilege = append(privilege, r.Platform...)
RolePermission[v.Name] = enum.Role{
Platform: r.Platform,
Cluster: r.Cluster,
ClusterPrivilege: r.ClusterPrivilege,
Index: r.Index,
}
}
}
token := jwt.NewWithClaims(jwt.SigningMethodHS256, UserClaims{
User: &User{
Username: user.Username,
UserId: user.ID,
Roles: roles,
},
RegisteredClaims: &jwt.RegisteredClaims{
ExpiresAt: jwt.NewNumericDate(time.Now().Add(24 * time.Hour)),
},
})
tokenString, err := token.SignedString([]byte(Secret))
if err != nil {
return
}
m = util.MapStr{
"access_token": tokenString,
"username": user.Username,
@ -215,27 +221,33 @@ func ValidateLogin(authorizationHeader string) (clams *UserClaims, err error) {
}
func ValidatePermission(claims *UserClaims, permissions []string) (err error) {
reqUser := claims.User
user := claims.User
if reqUser.UserId == "" {
if user.UserId == "" {
err = errors.New("user id is empty")
return
}
if reqUser.Roles == nil {
if user.Roles == nil {
err = errors.New("api permission is empty")
return
}
return nil
// 权限校验
userPermissionMap := make(map[string]struct{})
for _, role := range reqUser.Roles {
for _, role := range user.Roles {
if _, ok := RolePermission[role]; ok {
for _, v := range RolePermission[role].Platform {
userPermissionMap[v] = struct{}{}
//all include read
if strings.Contains(v, "all") {
key := v[:len(v)-3] + "read"
userPermissionMap[key] = struct{}{}
}
}
}
}
//all=>read
var count int
for _, v := range permissions {
if _, ok := userPermissionMap[v]; ok {

View File

@ -73,6 +73,7 @@ func init() {
loadRolePermission()
}
func existInternalUser() {
//user, err := biz.GetUser("admin")
//if errors.Is(err, elastic.ErrNotFound) {