62 lines
1.4 KiB
Go
62 lines
1.4 KiB
Go
package database
|
|
|
|
import (
|
|
"github.com/drone/drone/shared/model"
|
|
"github.com/russross/meddler"
|
|
)
|
|
|
|
type Permstore struct {
|
|
meddler.DB
|
|
}
|
|
|
|
func NewPermstore(db meddler.DB) *Permstore {
|
|
return &Permstore{db}
|
|
}
|
|
|
|
// GetPerm retrieves the User's permission from
|
|
// the datastore for the given repository.
|
|
func (db *Permstore) GetPerm(user *model.User, repo *model.Repo) (*model.Perm, error) {
|
|
var perm = new(model.Perm)
|
|
var err = meddler.QueryRow(db, perm, rebind(permQuery), user.ID, repo.ID)
|
|
return perm, err
|
|
}
|
|
|
|
// PostPerm saves permission in the datastore.
|
|
func (db *Permstore) PostPerm(perm *model.Perm) error {
|
|
var _perm = new(model.Perm)
|
|
meddler.QueryRow(db, _perm, rebind(permQuery), perm.UserID, perm.RepoID)
|
|
if _perm.ID != 0 {
|
|
perm.ID = _perm.ID
|
|
}
|
|
return meddler.Save(db, permTable, perm)
|
|
}
|
|
|
|
// PutPerm saves permission in the datastore.
|
|
func (db *Permstore) PutPerm(perm *model.Perm) error {
|
|
return meddler.Save(db, permTable, perm)
|
|
}
|
|
|
|
// DelPerm removes permission from the datastore.
|
|
func (db *Permstore) DelPerm(perm *model.Perm) error {
|
|
var _, err = db.Exec(rebind(permDeleteStmt), perm.ID)
|
|
return err
|
|
}
|
|
|
|
// Permission table name in database.
|
|
const permTable = "perms"
|
|
|
|
// SQL query to retrieve a user's permission to
|
|
// access a repository.
|
|
const permQuery = `
|
|
SELECT *
|
|
FROM perms
|
|
WHERE user_id=?
|
|
AND repo_id=?
|
|
LIMIT 1
|
|
`
|
|
|
|
// SQL statement to delete a User by ID.
|
|
const permDeleteStmt = `
|
|
DELETE FROM perms
|
|
WHERE perm_id=?
|
|
`
|