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 {
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"`
}

func NewUserRole(r UserRole) (int64, error) {
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) {
r := &UserRole{}
@@ -62,7 +65,7 @@ func (err ErrRoleNotExists) Error() string {
return fmt.Sprintf("role is not exists")
}

type AddRoleReq struct {
type OperateRoleReq struct {
UserName string `json:"user_name" 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"
)

func AddRole(ctx *context.APIContext, form models.AddRoleReq) {
func AddUserRole(ctx *context.APIContext, form models.OperateRoleReq) {
user, err := models.GetUserByName(form.UserName)
if err != nil {
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())
}
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.Post("", bind(models.AddRoleReq{}), admin.AddRole)
m.Combo("").Post(bind(models.OperateRoleReq{}), admin.AddUserRole).
Delete(bind(models.OperateRoleReq{}), admin.DeleteUserRole)
})
}, reqToken(), reqSiteAdmin())



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

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

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

func AddUserRole(userId int64, roleType models.RoleType) error {
@@ -10,6 +11,24 @@ func AddUserRole(userId int64, roleType models.RoleType) error {
return models.ErrRoleNotExists{}
}
_, 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
}



Loading…
Cancel
Save