feat: (rbac) create user / update user / get user / update user role
This commit is contained in:
parent
6e78f1bfe6
commit
cd81b909b5
|
@ -9,4 +9,9 @@ type User struct {
|
||||||
Name string `json:"name" elastic_mapping:"name:{type:keyword}"`
|
Name string `json:"name" elastic_mapping:"name:{type:keyword}"`
|
||||||
Phone string `json:"phone" elastic_mapping:"phone:{type:keyword}"`
|
Phone string `json:"phone" elastic_mapping:"phone:{type:keyword}"`
|
||||||
Email string `json:"email" elastic_mapping:"email:{type:keyword}"`
|
Email string `json:"email" elastic_mapping:"email:{type:keyword}"`
|
||||||
|
Roles []UserRole `json:"roles" elastic_mapping:"roles:{type:text}"`
|
||||||
|
}
|
||||||
|
type UserRole struct {
|
||||||
|
Id string `json:"id"`
|
||||||
|
Name string `json:"name"`
|
||||||
}
|
}
|
||||||
|
|
|
@ -10,12 +10,12 @@ import (
|
||||||
"infini.sh/framework/core/orm"
|
"infini.sh/framework/core/orm"
|
||||||
)
|
)
|
||||||
|
|
||||||
func CreateRole(req dto.CreateRoleReq) (id string, err error) {
|
func CreateRole(req dto.CreateRole) (id string, err error) {
|
||||||
|
|
||||||
q := &orm.Query{Size: 1000}
|
q := orm.Query{Size: 1000}
|
||||||
q.Conds = orm.And(orm.Eq("name", req.Name))
|
q.Conds = orm.And(orm.Eq("name", req.Name))
|
||||||
|
|
||||||
err, result := orm.Search(rbac.Role{}, q)
|
err, result := orm.Search(rbac.Role{}, &q)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -34,7 +34,7 @@ func CreateRole(req dto.CreateRoleReq) (id string, err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
func DeleteRole(id string) (err error) {
|
func DeleteRole(id string) (err error) {
|
||||||
role := &rbac.Role{}
|
role := rbac.Role{}
|
||||||
role.ID = id
|
role.ID = id
|
||||||
_, err = orm.Get(&role)
|
_, err = orm.Get(&role)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -42,15 +42,8 @@ func DeleteRole(id string) (err error) {
|
||||||
}
|
}
|
||||||
return orm.Delete(role)
|
return orm.Delete(role)
|
||||||
}
|
}
|
||||||
func isExistRole(o interface{}) (err error) {
|
|
||||||
_, err = orm.Get(o)
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
return
|
func UpdateRole(id string, req dto.UpdateRole) (err error) {
|
||||||
}
|
|
||||||
func UpdateRole(id string, req dto.UpdateRoleReq) (err error) {
|
|
||||||
role := rbac.Role{}
|
role := rbac.Role{}
|
||||||
role.ID = id
|
role.ID = id
|
||||||
_, err = orm.Get(&role)
|
_, err = orm.Get(&role)
|
||||||
|
@ -59,6 +52,7 @@ func UpdateRole(id string, req dto.UpdateRoleReq) (err error) {
|
||||||
}
|
}
|
||||||
role.Description = req.Description
|
role.Description = req.Description
|
||||||
role.Permission = req.Permission
|
role.Permission = req.Permission
|
||||||
|
role.Updated = time.Now()
|
||||||
err = orm.Save(role)
|
err = orm.Save(role)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,103 @@
|
||||||
|
package biz
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"infini.sh/console/model/rbac"
|
||||||
|
"infini.sh/console/plugin/api/rbac/dto"
|
||||||
|
"infini.sh/framework/core/orm"
|
||||||
|
"infini.sh/framework/core/util"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
func DeleteUser(id string) (err error) {
|
||||||
|
|
||||||
|
user := rbac.User{}
|
||||||
|
user.ID = id
|
||||||
|
_, err = orm.Get(&user)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
return orm.Delete(user)
|
||||||
|
|
||||||
|
}
|
||||||
|
func CreateUser(req dto.CreateUser) (id string, err error) {
|
||||||
|
q := orm.Query{Size: 1000}
|
||||||
|
q.Conds = orm.And(orm.Eq("name", req.Name))
|
||||||
|
|
||||||
|
err, result := orm.Search(rbac.Role{}, &q)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
fmt.Println(string(result.Raw))
|
||||||
|
roles := make([]rbac.UserRole, 0)
|
||||||
|
for _, v := range req.Roles {
|
||||||
|
roles = append(roles, rbac.UserRole{
|
||||||
|
Id: v.Id,
|
||||||
|
Name: v.Name,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
user := rbac.User{
|
||||||
|
Name: req.Name,
|
||||||
|
Username: req.Username,
|
||||||
|
Password: util.MD5digest(req.Password),
|
||||||
|
Email: req.Email,
|
||||||
|
Phone: req.Phone,
|
||||||
|
Roles: roles,
|
||||||
|
}
|
||||||
|
user.ID = util.GetUUID()
|
||||||
|
user.Created = time.Now()
|
||||||
|
user.Updated = time.Now()
|
||||||
|
err = orm.Save(&user)
|
||||||
|
if err != nil {
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
return user.ID, nil
|
||||||
|
}
|
||||||
|
func UpdateUser(id string, req dto.UpdateUser) (err error) {
|
||||||
|
user := rbac.User{}
|
||||||
|
user.ID = id
|
||||||
|
_, err = orm.Get(&user)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
user.Name = req.Name
|
||||||
|
user.Email = req.Email
|
||||||
|
user.Phone = req.Phone
|
||||||
|
user.Updated = time.Now()
|
||||||
|
err = orm.Save(user)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
func UpdateUserRole(id string, req dto.UpdateUserRole) (err error) {
|
||||||
|
user := rbac.User{}
|
||||||
|
user.ID = id
|
||||||
|
_, err = orm.Get(&user)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
roles := make([]rbac.UserRole, 0)
|
||||||
|
for _, v := range req.Roles {
|
||||||
|
roles = append(roles, rbac.UserRole{
|
||||||
|
Id: v.Id,
|
||||||
|
Name: v.Name,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
user.Roles = roles
|
||||||
|
user.Updated = time.Now()
|
||||||
|
err = orm.Save(user)
|
||||||
|
return
|
||||||
|
|
||||||
|
}
|
||||||
|
func GetUser(id string) (user rbac.User, err error) {
|
||||||
|
|
||||||
|
user.ID = id
|
||||||
|
_, err = orm.Get(&user)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
return
|
||||||
|
|
||||||
|
}
|
||||||
|
func SearchUser() {
|
||||||
|
|
||||||
|
}
|
|
@ -1,12 +1,12 @@
|
||||||
package dto
|
package dto
|
||||||
|
|
||||||
type CreateRoleReq struct {
|
type CreateRole struct {
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
Description string `json:"description" `
|
Description string `json:"description" `
|
||||||
RoleType string `json:"type" `
|
RoleType string `json:"type" `
|
||||||
Permission interface{} `json:"permission"`
|
Permission interface{} `json:"permission"`
|
||||||
}
|
}
|
||||||
type UpdateRoleReq struct {
|
type UpdateRole struct {
|
||||||
Description string `json:"description" `
|
Description string `json:"description" `
|
||||||
Permission interface{} `json:"permission"`
|
Permission interface{} `json:"permission"`
|
||||||
}
|
}
|
||||||
|
@ -16,3 +16,24 @@ type ElasticsearchPermission struct {
|
||||||
ClusterPrivilege []string `json:"cluster_privilege" `
|
ClusterPrivilege []string `json:"cluster_privilege" `
|
||||||
IndexPrivilege []string `json:"index_privilege" `
|
IndexPrivilege []string `json:"index_privilege" `
|
||||||
}
|
}
|
||||||
|
type CreateUser struct {
|
||||||
|
Username string `json:"username"`
|
||||||
|
Password string `json:"password"`
|
||||||
|
Name string `json:"name"`
|
||||||
|
Email string `json:"email"`
|
||||||
|
Phone string `json:"phone"`
|
||||||
|
Roles []Role `json:"roles"`
|
||||||
|
}
|
||||||
|
type Role struct {
|
||||||
|
Id string `json:"id"`
|
||||||
|
Name string `json:"name"`
|
||||||
|
}
|
||||||
|
type UpdateUser struct {
|
||||||
|
Name string `json:"name"`
|
||||||
|
Email string `json:"email"`
|
||||||
|
Phone string `json:"phone"`
|
||||||
|
// Roles []Role `json:"roles"`
|
||||||
|
}
|
||||||
|
type UpdateUserRole struct {
|
||||||
|
Roles []Role `json:"roles"`
|
||||||
|
}
|
||||||
|
|
|
@ -20,12 +20,15 @@ func registerRouter() {
|
||||||
api.HandleAPIMethod(api.GET, "/role/:id", r.GetRole)
|
api.HandleAPIMethod(api.GET, "/role/:id", r.GetRole)
|
||||||
api.HandleAPIMethod(api.DELETE, "/role/:id", r.DeleteRole)
|
api.HandleAPIMethod(api.DELETE, "/role/:id", r.DeleteRole)
|
||||||
api.HandleAPIMethod(api.PUT, "/role/:id", r.UpdateRole)
|
api.HandleAPIMethod(api.PUT, "/role/:id", r.UpdateRole)
|
||||||
api.HandleAPIMethod(api.GET, "/roles/:type", r.ListRole)
|
api.HandleAPIMethod(api.GET, "/role/_search", r.SearchRole)
|
||||||
|
|
||||||
api.HandleAPIMethod(api.GET, "/user/:id", r.ListRole)
|
api.HandleAPIMethod(api.POST, "/user", r.CreateUser)
|
||||||
api.HandleAPIMethod(api.GET, "/users", r.ListRole)
|
api.HandleAPIMethod(api.GET, "/user/:id", r.GetUser)
|
||||||
api.HandleAPIMethod(api.DELETE, "/user/:id", r.ListRole)
|
api.HandleAPIMethod(api.GET, "/user/search", r.SearchUser)
|
||||||
api.HandleAPIMethod(api.GET, "/users", r.ListRole)
|
api.HandleAPIMethod(api.DELETE, "/user/:id", r.DeleteUser)
|
||||||
|
api.HandleAPIMethod(api.PUT, "/user/:id", r.UpdateUser)
|
||||||
|
api.HandleAPIMethod(api.PUT, "/user/:id/role", r.UpdateUserRole)
|
||||||
|
api.HandleAPIMethod(api.GET, "/user/_search", r.SearchUser)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,19 +17,17 @@ func (h Rbac) CreateRole(w http.ResponseWriter, r *http.Request, ps httprouter.P
|
||||||
_ = h.WriteError(w, err.Error(), http.StatusInternalServerError)
|
_ = h.WriteError(w, err.Error(), http.StatusInternalServerError)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
var id string
|
|
||||||
|
|
||||||
switch roleType {
|
var req dto.CreateRole
|
||||||
case Console:
|
|
||||||
var req dto.CreateRoleReq
|
|
||||||
err = h.DecodeJSON(r, &req)
|
err = h.DecodeJSON(r, &req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
_ = h.WriteError(w, err.Error(), http.StatusInternalServerError)
|
_ = h.WriteError(w, err.Error(), http.StatusInternalServerError)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
req.RoleType = roleType
|
||||||
|
|
||||||
|
var id string
|
||||||
id, err = biz.CreateRole(req)
|
id, err = biz.CreateRole(req)
|
||||||
}
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
_ = log.Error(err.Error())
|
_ = log.Error(err.Error())
|
||||||
_ = h.WriteError(w, err.Error(), http.StatusInternalServerError)
|
_ = h.WriteError(w, err.Error(), http.StatusInternalServerError)
|
||||||
|
@ -40,7 +38,7 @@ func (h Rbac) CreateRole(w http.ResponseWriter, r *http.Request, ps httprouter.P
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h Rbac) ListRole(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
|
func (h Rbac) SearchRole(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
|
||||||
|
|
||||||
roleType := ps.MustGetParameter("type")
|
roleType := ps.MustGetParameter("type")
|
||||||
err := validateRoleType(roleType)
|
err := validateRoleType(roleType)
|
||||||
|
@ -74,11 +72,12 @@ func (h Rbac) DeleteRole(w http.ResponseWriter, r *http.Request, ps httprouter.P
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
_ = h.WriteJSON(w, DeleteResponse(id), http.StatusOK)
|
_ = h.WriteJSON(w, DeleteResponse(id), http.StatusOK)
|
||||||
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (h Rbac) UpdateRole(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
|
func (h Rbac) UpdateRole(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
|
||||||
id := ps.MustGetParameter("id")
|
id := ps.MustGetParameter("id")
|
||||||
var req dto.UpdateRoleReq
|
var req dto.UpdateRole
|
||||||
err := h.DecodeJSON(r, &req)
|
err := h.DecodeJSON(r, &req)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
_ = h.WriteError(w, err.Error(), http.StatusInternalServerError)
|
_ = h.WriteError(w, err.Error(), http.StatusInternalServerError)
|
||||||
|
|
|
@ -1,5 +1,13 @@
|
||||||
package rbac
|
package rbac
|
||||||
|
|
||||||
|
import (
|
||||||
|
"infini.sh/console/plugin/api/rbac/biz"
|
||||||
|
"infini.sh/console/plugin/api/rbac/dto"
|
||||||
|
httprouter "infini.sh/framework/core/api/router"
|
||||||
|
"net/http"
|
||||||
|
log "src/github.com/cihub/seelog"
|
||||||
|
)
|
||||||
|
|
||||||
type CreateUserReq struct {
|
type CreateUserReq struct {
|
||||||
Username string `json:"username" `
|
Username string `json:"username" `
|
||||||
Password string `json:"password" `
|
Password string `json:"password" `
|
||||||
|
@ -7,3 +15,90 @@ type CreateUserReq struct {
|
||||||
Phone string `json:"phone" `
|
Phone string `json:"phone" `
|
||||||
Email string `json:"email" `
|
Email string `json:"email" `
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (h Rbac) CreateUser(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
|
||||||
|
|
||||||
|
var req dto.CreateUser
|
||||||
|
err := h.DecodeJSON(r, &req)
|
||||||
|
if err != nil {
|
||||||
|
_ = h.WriteError(w, err.Error(), http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
id, err := biz.CreateUser(req)
|
||||||
|
if err != nil {
|
||||||
|
_ = log.Error(err.Error())
|
||||||
|
_ = h.WriteError(w, err.Error(), http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
_ = h.WriteJSON(w, CreateResponse(id), http.StatusOK)
|
||||||
|
return
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h Rbac) GetUser(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
|
||||||
|
id := ps.MustGetParameter("id")
|
||||||
|
user, err := biz.GetUser(id)
|
||||||
|
if err != nil {
|
||||||
|
_ = log.Error(err.Error())
|
||||||
|
_ = h.WriteError(w, err.Error(), http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
h.WriteJSON(w, Response{Hit: user}, http.StatusOK)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h Rbac) UpdateUser(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
|
||||||
|
id := ps.MustGetParameter("id")
|
||||||
|
var req dto.UpdateUser
|
||||||
|
err := h.DecodeJSON(r, &req)
|
||||||
|
if err != nil {
|
||||||
|
_ = log.Error(err.Error())
|
||||||
|
_ = h.WriteError(w, err.Error(), http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
err = biz.UpdateUser(id, req)
|
||||||
|
if err != nil {
|
||||||
|
_ = log.Error(err.Error())
|
||||||
|
_ = h.WriteError(w, err.Error(), http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
_ = h.WriteJSON(w, UpdateResponse(id), http.StatusOK)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h Rbac) UpdateUserRole(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
|
||||||
|
id := ps.MustGetParameter("id")
|
||||||
|
var req dto.UpdateUserRole
|
||||||
|
err := h.DecodeJSON(r, &req)
|
||||||
|
if err != nil {
|
||||||
|
_ = log.Error(err.Error())
|
||||||
|
_ = h.WriteError(w, err.Error(), http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
err = biz.UpdateUserRole(id, req)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
_ = log.Error(err.Error())
|
||||||
|
_ = h.WriteError(w, err.Error(), http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
_ = h.WriteJSON(w, UpdateResponse(id), http.StatusOK)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h Rbac) DeleteUser(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
|
||||||
|
id := ps.MustGetParameter("id")
|
||||||
|
err := biz.DeleteUser(id)
|
||||||
|
|
||||||
|
if err != nil {
|
||||||
|
_ = log.Error(err.Error())
|
||||||
|
_ = h.WriteError(w, err.Error(), http.StatusInternalServerError)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
_ = h.WriteJSON(w, DeleteResponse(id), http.StatusOK)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (h Rbac) SearchUser(w http.ResponseWriter, r *http.Request, ps httprouter.Params) {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue