Controllers/BeforeFilters

// app/controllers/base_controller.go
package controllers

type User struct {
	ID string
}

type AuthenticatedUser struct {
	*User
}

func (c *BaseController) GenUser() (*User, error) {
	value, ok, err := c.SessionGet("user_id")
	if err != nil {
		return nil, err
	}
	userID, _ := value.(string)
	if !ok || userID == "" {
		return nil, nil
	}
	return &User{ID: userID}, nil
}

func (c *BaseController) GenAuthenticatedUser(user *User) (*AuthenticatedUser, error) {
	if user == nil {
		return nil, ErrLoginRequired
	}
	return &AuthenticatedUser{User: user}, nil
}

func (c *BaseController) BeforeAction(user *User) error {
	c.Set("current_user", user)
	return nil
}
// app/controllers/admin_controller/admincontroller.go
package admincontroller

import "sample_app/app/controllers"

func (c *AdminController) Index(user *controllers.AuthenticatedUser) error {
	c.Set("title", "Admin")
	c.Set("user", user)
	return nil
}