| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980 | 
							- // Copyright 2014 The Gogs Authors. All rights reserved.
 
- // Use of this source code is governed by a MIT-style
 
- // license that can be found in the LICENSE file.
 
- package models
 
- import (
 
- 	"strings"
 
- 	"time"
 
- 	"github.com/go-xorm/xorm"
 
- )
 
- type AccessType int
 
- const (
 
- 	READABLE AccessType = iota + 1
 
- 	WRITABLE
 
- )
 
- // Access represents the accessibility of user to repository.
 
- type Access struct {
 
- 	Id       int64
 
- 	UserName string     `xorm:"unique(s)"`
 
- 	RepoName string     `xorm:"unique(s)"` // <user name>/<repo name>
 
- 	Mode     AccessType `xorm:"unique(s)"`
 
- 	Created  time.Time  `xorm:"created"`
 
- }
 
- // AddAccess adds new access record.
 
- func AddAccess(access *Access) error {
 
- 	access.UserName = strings.ToLower(access.UserName)
 
- 	access.RepoName = strings.ToLower(access.RepoName)
 
- 	_, err := x.Insert(access)
 
- 	return err
 
- }
 
- // UpdateAccess updates access information.
 
- func UpdateAccess(access *Access) error {
 
- 	access.UserName = strings.ToLower(access.UserName)
 
- 	access.RepoName = strings.ToLower(access.RepoName)
 
- 	_, err := x.Id(access.Id).Update(access)
 
- 	return err
 
- }
 
- // DeleteAccess deletes access record.
 
- func DeleteAccess(access *Access) error {
 
- 	_, err := x.Delete(access)
 
- 	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.
 
- // The repoName should be in format <username>/<reponame>.
 
- func HasAccess(uname, repoName string, mode AccessType) (bool, error) {
 
- 	if len(repoName) == 0 {
 
- 		return false, nil
 
- 	}
 
- 	access := &Access{
 
- 		UserName: strings.ToLower(uname),
 
- 		RepoName: strings.ToLower(repoName),
 
- 	}
 
- 	has, err := x.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
 
- }
 
 
  |