Browse Source

添加用户角色管理

2023
chenyifan01 2 years ago
parent
commit
6a447daef3
4 changed files with 42 additions and 6 deletions
  1. +7
    -4
      models/role.go
  2. +14
    -1
      routers/api/v1/admin/role.go
  3. +2
    -1
      routers/api/v1/api.go
  4. +19
    -0
      services/role/user_role.go

+ 7
- 4
models/role.go View File

@@ -18,15 +18,18 @@ type Role struct {
} }


type UserRole struct { type UserRole struct {
ID int64 `xorm:"pk autoincr"`
RoleType RoleType
UserId int64 `xorm:"INDEX"`
ID int64 `xorm:"pk autoincr"`
UserId int64 `xorm:"INDEX UNIQUE(uq_user_role)"`
RoleType RoleType `xorm:"UNIQUE(uq_user_role)"`
CreatedUnix timeutil.TimeStamp `xorm:"INDEX created"` CreatedUnix timeutil.TimeStamp `xorm:"INDEX created"`
} }


func NewUserRole(r UserRole) (int64, error) { func NewUserRole(r UserRole) (int64, error) {
return x.Insert(&r) return x.Insert(&r)
} }
func DeleteUserRole(roleType RoleType, userId int64) (int64, error) {
return x.Where("role_type = ? and user_id = ?", roleType, userId).Delete(&UserRole{})
}


func GetUserRoleByUserAndRole(userId int64, roleType RoleType) (*UserRole, error) { func GetUserRoleByUserAndRole(userId int64, roleType RoleType) (*UserRole, error) {
r := &UserRole{} r := &UserRole{}
@@ -62,7 +65,7 @@ func (err ErrRoleNotExists) Error() string {
return fmt.Sprintf("role is not exists") return fmt.Sprintf("role is not exists")
} }


type AddRoleReq struct {
type OperateRoleReq struct {
UserName string `json:"user_name" binding:"Required"` UserName string `json:"user_name" binding:"Required"`
RoleType RoleType `json:"role_type" binding:"Required"` RoleType RoleType `json:"role_type" binding:"Required"`
} }

+ 14
- 1
routers/api/v1/admin/role.go View File

@@ -8,7 +8,7 @@ import (
"net/http" "net/http"
) )


func AddRole(ctx *context.APIContext, form models.AddRoleReq) {
func AddUserRole(ctx *context.APIContext, form models.OperateRoleReq) {
user, err := models.GetUserByName(form.UserName) user, err := models.GetUserByName(form.UserName)
if err != nil { if err != nil {
ctx.JSON(http.StatusOK, response.OuterServerError("User not exists")) ctx.JSON(http.StatusOK, response.OuterServerError("User not exists"))
@@ -21,3 +21,16 @@ func AddRole(ctx *context.APIContext, form models.AddRoleReq) {
} }
ctx.JSON(http.StatusOK, response.OuterSuccess()) ctx.JSON(http.StatusOK, response.OuterSuccess())
} }
func DeleteUserRole(ctx *context.APIContext, form models.OperateRoleReq) {
user, err := models.GetUserByName(form.UserName)
if err != nil {
ctx.JSON(http.StatusOK, response.OuterServerError("User not exists"))
return
}
err = role.DeleteUserRole(user.ID, form.RoleType)
if err != nil {
ctx.JSON(http.StatusOK, response.OuterResponseError(err))
return
}
ctx.JSON(http.StatusOK, response.OuterSuccess())
}

+ 2
- 1
routers/api/v1/api.go View File

@@ -1190,7 +1190,8 @@ func RegisterRoutes(m *macaron.Macaron) {
}) })
}) })
m.Group("/role", func() { m.Group("/role", func() {
m.Post("", bind(models.AddRoleReq{}), admin.AddRole)
m.Combo("").Post(bind(models.OperateRoleReq{}), admin.AddUserRole).
Delete(bind(models.OperateRoleReq{}), admin.DeleteUserRole)
}) })
}, reqToken(), reqSiteAdmin()) }, reqToken(), reqSiteAdmin())




+ 19
- 0
services/role/user_role.go View File

@@ -2,6 +2,7 @@ package role


import ( import (
"code.gitea.io/gitea/models" "code.gitea.io/gitea/models"
pg "github.com/lib/pq"
) )


func AddUserRole(userId int64, roleType models.RoleType) error { func AddUserRole(userId int64, roleType models.RoleType) error {
@@ -10,6 +11,24 @@ func AddUserRole(userId int64, roleType models.RoleType) error {
return models.ErrRoleNotExists{} return models.ErrRoleNotExists{}
} }
_, err := models.NewUserRole(models.UserRole{UserId: userId, RoleType: roleType}) _, err := models.NewUserRole(models.UserRole{UserId: userId, RoleType: roleType})
if err != nil {
e := err.(*pg.Error)
//23505 is postgrey error code for unique_violation
//see https://www.postgresql.org/docs/current/errcodes-appendix.html
//if unique_violation,user role record exists,just return
if e.Code == "23505" {
return nil
}
}
return err
}

func DeleteUserRole(userId int64, roleType models.RoleType) error {
role := GetRole(roleType)
if role == nil {
return models.ErrRoleNotExists{}
}
_, err := models.DeleteUserRole(roleType, userId)
return err return err
} }




Loading…
Cancel
Save