Permission-Based Access Control
PBAC provides granular access control using permission strings (for example, "read:users" or "write:reports").
Permissions are checked against the user's Authorities list.
RequirePermission
// Requires "read:users", sends 403 on failure
r.Use(auth.RequirePermission("read:users"))
// Custom error handler
r.Use(auth.RequirePermission("read:users", func(c *zen.Ctx) {
c.Error(403, "access denied")
}))
Must be used after RequireAuth since it reads the user from the context.
Programmatic Checks
user := auth.GetUser(c)
if user.RequireAuthority("write:reports") {
// user has the permission
}
if user.RequireAnyPermission("read:reports", "write:reports") {
// user has at least one of these permissions
}
if user.RequireAllPermissions("read:reports", "write:reports") {
// user has every listed permission
}
Populating Permissions
Set permissions when creating the user in your authenticator:
return &auth.User{
ID: "123",
Username: "john",
Authorities: auth.Authorities("read:users", "write:reports"),
}, nil