/
app.go
79 lines (70 loc) · 1.79 KB
/
app.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
package controllers
import (
"github.com/opennut/gorum/app/models"
"github.com/opennut/gorum/app/routes"
"github.com/revel/revel"
"modules/gorm/app"
)
// PublicApp without permissions
type PublicApp struct {
*revel.Controller
gorm.GormController
}
// AddUser func
// This function add user variable to ViewArgs
func (c PublicApp) AddUser() revel.Result {
if user := c.connected(); user != nil {
c.ViewArgs["user"] = user
}
return nil
}
// connected return connected user
func (c PublicApp) connected() *models.User {
if c.ViewArgs["user"] != nil {
return c.ViewArgs["user"].(*models.User)
}
if username, ok := c.Session["user"]; ok {
return c.currentUser(username)
}
return nil
}
// Ger current user by email
func (c PublicApp) currentUser(email string) *models.User {
var currentUser = &models.User{}
c.Txn.Where("email = ?", email).First(¤tUser)
if c.Txn.Error != nil {
return nil
}
c.ViewArgs["currentController"] = c.Name
c.ViewArgs["currentAction"] = c.MethodName
return currentUser
}
// App user loggued
type App struct {
PublicApp
}
// Check if user is connected
func (c App) checkUser() revel.Result {
if user := c.connected(); user == nil {
c.Validation.Required(user != nil).Key("Email").Message("Permissions required")
return c.Redirect(routes.Accounts.Login())
}
return nil
}
// AdminApp user loggued
type AdminApp struct {
PublicApp
}
// Check if user is connected
func (c AdminApp) checkUser() revel.Result {
if user := c.connected(); user == nil {
c.Validation.Required(user != nil).Key("Email").Message("Permissions required")
return c.Redirect(routes.Accounts.Login())
} else {
/*if !user.IsAdmin {
c.Validation.Required(user != nil).Key("Email").Message("Permissions required")
return c.Redirect(routes.Accounts.Login())
}*/
}
return nil
}