mirror of https://github.com/shunfei/cronsun
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
108 lines
2.3 KiB
108 lines
2.3 KiB
package cronsun |
|
|
|
import ( |
|
"time" |
|
|
|
"gopkg.in/mgo.v2" |
|
"gopkg.in/mgo.v2/bson" |
|
) |
|
|
|
const ( |
|
Coll_Account = "account" |
|
) |
|
|
|
type Account struct { |
|
ID bson.ObjectId `bson:"_id" json:"id"` |
|
Role Role `bson:"role" json:"role"` |
|
Email string `bson:"email" json:"email"` |
|
Password string `bson:"password" json:"password"` |
|
Salt string `bson:"salt" json:"salt"` |
|
Status UserStatus `bson:"status" json:"status"` |
|
Session string `bson:"session" json:"-"` |
|
// If true, role and status are unchangeable, email and password can be change by it self only. |
|
Unchangeable bool `bson:"unchangeable" json:"-"` |
|
CreateTime time.Time `bson:"createTime" json:"createTime"` |
|
} |
|
|
|
type Role int |
|
|
|
const ( |
|
Administrator Role = 1 |
|
Developer Role = 2 |
|
Reporter Role = 3 |
|
) |
|
|
|
func (r Role) Defined() bool { |
|
switch r { |
|
case Administrator, Developer, Reporter: |
|
return true |
|
} |
|
return false |
|
} |
|
|
|
func (r Role) String() string { |
|
switch r { |
|
case Administrator: |
|
return "Administrator" |
|
case Developer: |
|
return "Developer" |
|
case Reporter: |
|
return "Reporter" |
|
} |
|
return "Undefined" |
|
} |
|
|
|
type UserStatus int |
|
|
|
const ( |
|
UserBanned UserStatus = -1 |
|
UserActived UserStatus = 1 |
|
) |
|
|
|
func (s UserStatus) Defined() bool { |
|
switch s { |
|
case UserBanned, UserActived: |
|
return true |
|
} |
|
return false |
|
} |
|
|
|
func GetAccounts(query bson.M) (list []Account, err error) { |
|
err = mgoDB.WithC(Coll_Account, func(c *mgo.Collection) error { |
|
return c.Find(query).All(&list) |
|
}) |
|
return |
|
} |
|
|
|
func GetAccountByEmail(email string) (u *Account, err error) { |
|
err = mgoDB.FindOne(Coll_Account, bson.M{"email": email}, &u) |
|
return |
|
} |
|
|
|
func CreateAccount(u *Account) error { |
|
u.ID = bson.NewObjectId() |
|
u.CreateTime = time.Now() |
|
return mgoDB.Insert(Coll_Account, u) |
|
|
|
} |
|
|
|
func UpdateAccount(query bson.M, change bson.M) error { |
|
return mgoDB.WithC(Coll_Account, func(c *mgo.Collection) error { |
|
return c.Update(query, bson.M{"$set": change}) |
|
}) |
|
} |
|
|
|
func BanAccount(email string) error { |
|
return mgoDB.WithC(Coll_Account, func(c *mgo.Collection) error { |
|
return c.Update(bson.M{"email": email}, bson.M{"$set": bson.M{"status": UserBanned}}) |
|
}) |
|
} |
|
|
|
func EnsureAccountIndex() error { |
|
return mgoDB.WithC(Coll_Account, func(c *mgo.Collection) error { |
|
return c.EnsureIndex(mgo.Index{ |
|
Key: []string{"email"}, |
|
Unique: true, |
|
}) |
|
}) |
|
}
|
|
|