background image

    } 
  }

  //返回 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

这样就可以用编译器帮助检查错误。