harbor
  • Introduction
  • 安装
  • API
  • harbor数据库
  • 镜像与源码项目
  • UI
    • user
      • GET_/users
    • Router
    • Controller-API
      • user
      • project
      • member
      • repository
      • base.go
  • JobService
  • secretkey
  • 日志
Powered by GitBook
On this page
  • API
  • 结构体
  • 获取及验证Header中的用户
  • API对应的处理函数

Was this helpful?

  1. UI
  2. Controller-API

user

API

user的API有如下几个:

GET        /users
POST       /users
GET        /users/current
PUT        /users/{user_id}
DELETE     /users/{user_id}
PUT        /users/{user_id}/password
PUT        /users/{user_id}/sysadmin

以上七个API匹配以下三行代码中的路由:

beego.Router("/api/users/?:id", &api.UserAPI{})
beego.Router("/api/users/:id([0-9]+)/password", &api.UserAPI{}, "put:ChangePassword")
beego.Router("/api/users/:id/sysadmin", &api.UserAPI{}, "put:ToggleUserAdminRole")

由此可以看出,user的API请求都在UserAPI这个结构体中,该结构体定义在/api/user.go当中。

结构体

type UserAPI struct {
    api.BaseAPI            // 继承了beego.Controller
    currentUserID    int        // Header中的user
    userID           int        // 路径参数 user_id
    SelfRegistration bool        // 是否支持用户自已注册,若为false则只能由管理员用户创建新的用户
    IsAdmin          bool        // 是否为系统用户
    AuthMode         string    // 授权模式:db
}

BaseAPI定义在/api/base.go文件中,如下:

type BaseAPI struct {
    beego.Controller
}

获取及验证Header中的用户

首先,我们介绍一下UserAPI中的userID、currentUserID、IsAdmin等五个参数是如何获取的。UserAPI继承了baseAPI,而baseAPI实际上就是继承了beego.Controller。UserAPI重写了beego.Controller的Prepare()函数,该函数会在Get()、POST()等函数之前执行。

Prepare()函数的代码如下:

  • AuthMode:通过配置文件获取,对应第(3)行代码

  • SelfRegistration:通过配置文件获取,对应第(5)行代码

  • IsAdmin:对应第(39)行代码,得到currentUserId后,再从数据库查询该user是否为管理员用户

  • userId:对应第(16)行代码,从路径参数中获取。如果请求的URL为

API对应的处理函数

GET /users

根据router中的路由规则,该API对应UserAPI中的GET()方法,GET()方法的源码见下面。第(2)行代码中当 ua.userId == 0 成立时,表示请求的URL为/users (可以通过Prepare()函数分析得出)。于是,我们只需要关注第一个if语句中的代码。在源代码的后面,本人做了简单的注释。

GET /users/current

根据router中的路由规则,该API也是对应UserAPI中的GET()方法,GET()方法的源码见下面。该URL对应的代码为Get()中的else if块,满足的条件为ua.userID == ua.currentUserID (可以通过Prepare()函数分析得出)。于是,我们只需要关注相应的代码,该函数中的其他代码块已省略。在源代码的后面,本人做了简单的注释。

POST /users

start here

PreviousController-APINextproject

Last updated 4 years ago

Was this helpful?

currentUserId:对应第(15)行代码,ValidateUser()函数是BaseAPI结构体的函数,该函数的分析见 。

BaseAPI.ValidateUser()