background image

Go 语言实战 - revel 框架教程之权限控制

一个站点上面最基本都会有三种用户角色,未登录用户、已登录用户和管理员。这一次我们
就来看看在

revel 框架下如何进行权限控制。

因为

revel 是 MVC 结构的,每一个 url 其实都会映射到一个具体的 Controller.Action 上面,

所以权限控制落到实处就是对

Action 的访问进行控制。

那么思路是如下:

1. 有一个方法能够判定当前是什么角色。

2. 有一地方定义了每一个 Action 的访问权限要求。

3. 有一个方法能够在调用所有 Action 之前被调用,而且能够判定是否还要继续调用 Action。

我们一项一项来解决。

存储当前用户的角色信息
先定义一个角色类型如下。

type Role int

const ( 
  AnonymousRole Role = iota 
  UserRole 
  AdminRole 
)

 定义个常量,用于在 session 里面存放当前用户的角色类型。

const ( 
  CSessionRole = "CSessionRole" 
)

然后在处理用户登陆的方法中在

session 里保存角色信息。

func (c *Account) HandleLogin(email, password string) revel.Result { 
  //在这里处理登陆逻辑

  c.Session[CSessionRole] = UserRole

  //在这里处理跳转和页面渲染 
}