}
}
//返回 nil 表示可以接着调用后面的 Action,在这里就代表有权限访问
return nil
}
将这个
InterceptFunc 注册到 revel 的处理链中。
revel.InterceptFunc(checkAuthentication, revel.BEFORE, revel.ALL_CONTROLLERS)
好了,一个简单的权限控制系统做好了。这里只是展现了最基本的概念和构建的思路,掌握
了之后,就算面对再复杂的要求也可以通过扩展其中的一个部分去满足。
另外,在我们的项目山坡网里,由于
authMap 定义了超过 50 个 Action,很多时候一旦
Action 名字更改了就可能导致权限控制失效,针对这个问题,可以通过下面方法来解决。
authMap 之前是用 string 做 key,改成用 reflect.Type 就好了,注册的时候这么写。
authMap[reflect.TypeOf((*Account.HandleLogin)(nil)] = AnonymousRole
这样就可以用编译器帮助检查错误。