aboutsummaryrefslogtreecommitdiff
path: root/models/access.go
diff options
context:
space:
mode:
authorMeaglith Ma <genedna@gmail.com>2014-04-23 12:29:53 +0800
committerMeaglith Ma <genedna@gmail.com>2014-04-23 12:29:53 +0800
commitee7bfe2ebe3a453beff5e8d4c1436061d321acfe (patch)
tree02575fe703fdcfaa2bd6450b852734d9305c9ce6 /models/access.go
parentb270b34c98b10b0e4807048890e883b6b06a6461 (diff)
parentf0cdf30134e62be6bf5924735a6145769e495cfc (diff)
Add memcached and redis Docker supported
Diffstat (limited to 'models/access.go')
-rw-r--r--models/access.go28
1 files changed, 23 insertions, 5 deletions
diff --git a/models/access.go b/models/access.go
index 83261575..970f4a94 100644
--- a/models/access.go
+++ b/models/access.go
@@ -7,6 +7,8 @@ package models
import (
"strings"
"time"
+
+ "github.com/go-xorm/xorm"
)
// Access types.
@@ -19,7 +21,7 @@ const (
type Access struct {
Id int64
UserName string `xorm:"unique(s)"`
- RepoName string `xorm:"unique(s)"`
+ RepoName string `xorm:"unique(s)"` // <user name>/<repo name>
Mode int `xorm:"unique(s)"`
Created time.Time `xorm:"created"`
}
@@ -40,12 +42,28 @@ func UpdateAccess(access *Access) error {
return err
}
+// UpdateAccess updates access information with session for rolling back.
+func UpdateAccessWithSession(sess *xorm.Session, access *Access) error {
+ if _, err := sess.Id(access.Id).Update(access); err != nil {
+ sess.Rollback()
+ return err
+ }
+ return nil
+}
+
// HasAccess returns true if someone can read or write to given repository.
func HasAccess(userName, repoName string, mode int) (bool, error) {
- return orm.Get(&Access{
- Id: 0,
+ access := &Access{
UserName: strings.ToLower(userName),
RepoName: strings.ToLower(repoName),
- Mode: mode,
- })
+ }
+ has, err := orm.Get(access)
+ if err != nil {
+ return false, err
+ } else if !has {
+ return false, nil
+ } else if mode > access.Mode {
+ return false, nil
+ }
+ return true, nil
}