// package models // import ( // "errors" // "fmt" // "github.com/globalsign/mgo/bson" // ) // //User model // type User struct { // ID bson.ObjectId `bson:"_id,omitempty"` // Email string `bson:"email"` // Name string `bson:"name"` // Username string `bson:"username"` // Password string `bson:"password"` // PrimaryGroup bson.ObjectId `bson:"primarygroup,omitempty"` // Groups []bson.ObjectId `bson:"groups,omitempty"` // Session string // } // //Create user // func (u *User) Create() error { // var user User // read("user", "email", u.Email, &user) // if u.Email == user.Email { // return errors.New("Email all ready used") // } // return create("user", &u) // } // //Read user // func (u *User) Read(key string, value interface{}) error { // err := read("user", key, value, &u) // if err != nil { // return errors.New("User doesn't exist") // } // return nil // } // //ReadAll users // func (u *User) ReadAll() ([]User, error) { // var users []User // var err error // err = readAll("user", "", nil, &users) // return users, err // } // //Update user // func (u *User) Update() error { // return update("user", "_id", u.ID, &u) // } // //Delete user // func (u *User) Delete(key string, value string) error { // err := delete("user", key, value) // return err // } // //HasPermission check if a given user is admin or has a given permisssion // func (u *User) HasPermission(perm string) bool { // var group Group // //Check primary group // err := group.Read("_id", u.PrimaryGroup) // fmt.Println(group.Admin) // if err == nil && (group.Admin == true || group.Permissions[perm] == true) { // return true // } // //Check other groups // for id := range u.Groups { // err = group.Read("_id", id) // if err == nil && (group.Admin || group.Permissions[perm]) { // return true // } // } // return false // }