fix: (rbac) user profile
This commit is contained in:
		
							parent
							
								
									a1efff50f2
								
							
						
					
					
						commit
						3bb04e4ab1
					
				| 
						 | 
				
			
			@ -22,10 +22,9 @@ type UserClaims struct {
 | 
			
		|||
	*User
 | 
			
		||||
}
 | 
			
		||||
type User struct {
 | 
			
		||||
	Username  string   `json:"username"`
 | 
			
		||||
	UserId    string   `json:"user_id"`
 | 
			
		||||
	Roles     []string `json:"roles"`
 | 
			
		||||
	Privilege []string `json:"privilege"`
 | 
			
		||||
	Username string   `json:"username"`
 | 
			
		||||
	UserId   string   `json:"user_id"`
 | 
			
		||||
	Roles    []string `json:"roles"`
 | 
			
		||||
}
 | 
			
		||||
type Account struct {
 | 
			
		||||
	ID       string          `json:"id,omitempty"     `
 | 
			
		||||
| 
						 | 
				
			
			@ -227,6 +226,7 @@ func ValidatePermission(claims *UserClaims, permissions []string) (err error) {
 | 
			
		|||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var count int
 | 
			
		||||
	for _, v := range permissions {
 | 
			
		||||
		if _, ok := userPermissionMap[v]; ok {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -21,3 +21,39 @@ func FromUserContext(ctx context.Context) (*User, error) {
 | 
			
		|||
	}
 | 
			
		||||
	return reqUser.User, nil
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
//type EsRole struct {
 | 
			
		||||
//	Cluster []string `json:"cluster,omitempty"`
 | 
			
		||||
//	Index   []string `json:"index,omitempty"`
 | 
			
		||||
//}
 | 
			
		||||
 | 
			
		||||
func NewEsContext(ctx context.Context, role EsRole) {
 | 
			
		||||
	//get user es role
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
func ValidateEsPermission(req, userRole EsRole) (err error) {
 | 
			
		||||
	userClusterMap := make(map[string]struct{})
 | 
			
		||||
	userIndexMap := make(map[string]struct{})
 | 
			
		||||
	for _, v := range userRole.Cluster {
 | 
			
		||||
		userClusterMap[v.Id] = struct{}{}
 | 
			
		||||
	}
 | 
			
		||||
	for _, val := range userRole.Index {
 | 
			
		||||
		for _, v := range val.Name {
 | 
			
		||||
			userIndexMap[v] = struct{}{}
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
	}
 | 
			
		||||
	//for _, v := range req.Cluster {
 | 
			
		||||
	//	if _, ok := userClusterMap[v]; !ok {
 | 
			
		||||
	//		err = errors.New("no cluster permission")
 | 
			
		||||
	//		return
 | 
			
		||||
	//	}
 | 
			
		||||
	//}
 | 
			
		||||
	//for _, v := range req.Index {
 | 
			
		||||
	//	if _, ok := userClusterMap[v]; !ok {
 | 
			
		||||
	//		err = errors.New("no index permission")
 | 
			
		||||
	//		return
 | 
			
		||||
	//	}
 | 
			
		||||
	//}
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,7 +16,6 @@ var InstanceAll = []string{"instance::read", "instance::write"}
 | 
			
		|||
 | 
			
		||||
var Admin []string
 | 
			
		||||
var BuildRoles = make(map[string]map[string]interface{}, 0)
 | 
			
		||||
var Permission = make(map[string][]string)
 | 
			
		||||
 | 
			
		||||
func init() {
 | 
			
		||||
	Admin = append(Admin, UserAll...)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,7 +4,19 @@ var ClusterApis = make(map[string][]string)
 | 
			
		|||
var IndexApis = make([]string, 0)
 | 
			
		||||
 | 
			
		||||
var RolePermission = make(map[string][]string)
 | 
			
		||||
var EsRolePermission = make(map[string]EsRole)
 | 
			
		||||
 | 
			
		||||
type EsRole struct {
 | 
			
		||||
	Cluster []struct {
 | 
			
		||||
		Id   string `json:"id"`
 | 
			
		||||
		Name string `json:"name"`
 | 
			
		||||
	} `json:"cluster,omitempty"`
 | 
			
		||||
	ClusterPrivilege []map[string][]string `json:"cluster_privilege,omitempty"`
 | 
			
		||||
	Index            []struct {
 | 
			
		||||
		Name      []string `json:"name"`
 | 
			
		||||
		Privilege []string `json:"privilege"`
 | 
			
		||||
	} `json:"index,omitempty"`
 | 
			
		||||
}
 | 
			
		||||
type ConsolePermisson struct {
 | 
			
		||||
	Platform []Platform `json:"platform"`
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -135,7 +135,7 @@ func (role ElasticsearchRole) Create(localUser *User) (id string, err error) {
 | 
			
		|||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	newRole := rbac.ElasticRole{
 | 
			
		||||
	newRole := rbac.Role{
 | 
			
		||||
		Name:        role.Name,
 | 
			
		||||
		Description: role.Description,
 | 
			
		||||
		RoleType:    role.RoleType,
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,7 +19,19 @@ func LoginRequired(h httprouter.Handle) httprouter.Handle {
 | 
			
		|||
		h(w, r, ps)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
func EsPermissionReqired(h httprouter.Handle) httprouter.Handle {
 | 
			
		||||
 | 
			
		||||
	return func(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
 | 
			
		||||
 | 
			
		||||
		claims, err := biz.ValidateLogin(r.Header.Get("Authorization"))
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			w = handleError(w, http.StatusUnauthorized, err)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		r = r.WithContext(biz.NewUserContext(r.Context(), claims))
 | 
			
		||||
		h(w, r, ps)
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
func PermissionRequired(h httprouter.Handle, permissions ...string) httprouter.Handle {
 | 
			
		||||
	return func(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
 | 
			
		||||
		claims, err := biz.ValidateLogin(r.Header.Get("Authorization"))
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -12,6 +12,15 @@ type Role struct {
 | 
			
		|||
	Platform    []string `json:"platform,omitempty" `
 | 
			
		||||
	BuiltIn     bool     `json:"builtin" elastic_mapping:"builtin:{type:boolean}"` //是否内置
 | 
			
		||||
 | 
			
		||||
	Cluster []struct {
 | 
			
		||||
		Id   string `json:"id"`
 | 
			
		||||
		Name string `json:"name"`
 | 
			
		||||
	} `json:"cluster,omitempty"`
 | 
			
		||||
	ClusterPrivilege []map[string][]string `json:"cluster_privilege,omitempty"`
 | 
			
		||||
	Index            []struct {
 | 
			
		||||
		Name      []string `json:"name"`
 | 
			
		||||
		Privilege []string `json:"privilege"`
 | 
			
		||||
	} `json:"index,omitempty"`
 | 
			
		||||
}
 | 
			
		||||
type ConsolePermission struct {
 | 
			
		||||
	Api  []string `json:"api"`
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -103,20 +103,31 @@ func (h Account) Profile(w http.ResponseWriter, r *http.Request, ps httprouter.P
 | 
			
		|||
		h.Error(w, err)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
	//user, err := biz.GetUser(reqUser.UserId)
 | 
			
		||||
	//if err != nil {
 | 
			
		||||
	//	h.Error(w, err)
 | 
			
		||||
	//	return
 | 
			
		||||
	//}
 | 
			
		||||
	//TODO get user from es
 | 
			
		||||
	u := util.MapStr{
 | 
			
		||||
		"user_id":  reqUser.UserId,
 | 
			
		||||
		"username": reqUser.Username,
 | 
			
		||||
		"email":    "hello@infini.ltd",
 | 
			
		||||
 | 
			
		||||
		"name": "admin",
 | 
			
		||||
	if reqUser.UserId == "admin" {
 | 
			
		||||
 | 
			
		||||
		u := util.MapStr{
 | 
			
		||||
			"user_id":  "admin",
 | 
			
		||||
			"username": "admin",
 | 
			
		||||
			"email":    "admin@infini.ltd",
 | 
			
		||||
			"name":     "admin",
 | 
			
		||||
		}
 | 
			
		||||
		h.WriteOKJSON(w, core.FoundResponse(reqUser.UserId, u))
 | 
			
		||||
	} else {
 | 
			
		||||
		user, err := biz.GetUser(reqUser.UserId)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			h.Error(w, err)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		u := util.MapStr{
 | 
			
		||||
			"user_id":  user.ID,
 | 
			
		||||
			"username": user.Username,
 | 
			
		||||
			"email":    user.Email,
 | 
			
		||||
			"name":     user.Name,
 | 
			
		||||
		}
 | 
			
		||||
		h.WriteOKJSON(w, core.FoundResponse(reqUser.UserId, u))
 | 
			
		||||
	}
 | 
			
		||||
	h.WriteOKJSON(w, core.FoundResponse(reqUser.UserId, u))
 | 
			
		||||
 | 
			
		||||
	return
 | 
			
		||||
}
 | 
			
		||||
func (h Account) UpdatePassword(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -17,7 +17,7 @@ type Rbac struct {
 | 
			
		|||
 | 
			
		||||
func registerRouter() {
 | 
			
		||||
	r := Rbac{}
 | 
			
		||||
	api.HandleAPIMethod(api.GET, "/permission/:type", m.PermissionRequired(r.ListPermission, enum.RoleRead...))
 | 
			
		||||
	api.HandleAPIMethod(api.GET, "/permission/:type", r.ListPermission)
 | 
			
		||||
	api.HandleAPIMethod(api.POST, "/role/:type", m.PermissionRequired(r.CreateRole, enum.RoleAll...))
 | 
			
		||||
	api.HandleAPIMethod(api.GET, "/role/:id", m.PermissionRequired(r.GetRole, enum.RoleRead...))
 | 
			
		||||
	api.HandleAPIMethod(api.DELETE, "/role/:id", m.PermissionRequired(r.DeleteRole, enum.RoleAll...))
 | 
			
		||||
| 
						 | 
				
			
			@ -55,10 +55,11 @@ func loadRolePermission() {
 | 
			
		|||
	biz.RolePermission = make(map[string][]string)
 | 
			
		||||
 | 
			
		||||
	biz.RolePermission["admin"] = enum.Admin
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
func init() {
 | 
			
		||||
	registerRouter()
 | 
			
		||||
 | 
			
		||||
	loadJsonConfig()
 | 
			
		||||
	loadRolePermission()
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue