More work on project permissions

This commit is contained in:
simon987
2019-02-16 11:47:54 -05:00
parent 03153c4d39
commit e079fc8497
18 changed files with 470 additions and 125 deletions

View File

@@ -126,7 +126,7 @@ func (database *Database) UpdateManagerPassword(manager *Manager, newPassword []
}).Trace("Database.UpdateManagerPassword UPDATE")
}
func (database *Database) ManagerHasRoleOn(manager *Manager, projectId int64) ManagerRole {
func (database *Database) GetManagerRoleOn(manager *Manager, projectId int64) ManagerRole {
db := database.getDB()
@@ -142,6 +142,25 @@ func (database *Database) ManagerHasRoleOn(manager *Manager, projectId int64) Ma
return role
}
func (database *Database) SetManagerRoleOn(manager *Manager, projectId int64, role ManagerRole) {
db := database.getDB()
res, err := db.Exec(`INSERT INTO manager_has_role_on_project (manager, role, project)
VALUES ($1,$2,$3) ON CONFLICT (manager, project) DO UPDATE SET role=$2`,
manager.Id, role, projectId)
handleErr(err)
rowsAffected, _ := res.RowsAffected()
logrus.WithFields(logrus.Fields{
"role": role,
"manager": manager.Username,
"rowsAffected": rowsAffected,
"project": projectId,
}).Info("Set manager role on project")
}
func (database *Database) GetAllManagers() *[]Manager {
db := database.getDB()

View File

@@ -127,13 +127,13 @@ func (database *Database) UpdateProject(project *Project) error {
return nil
}
func (database Database) GetAllProjects(workerId int64) *[]Project {
func (database Database) GetAllProjects(managerId int64) *[]Project {
projects := make([]Project, 0)
db := database.getDB()
var rows *sql.Rows
var err error
if workerId == 0 {
if managerId == 0 {
rows, err = db.Query(`SELECT
Id, priority, name, clone_url, git_repo, version, motd, public, hidden, COALESCE(chain,0)
FROM project
@@ -143,9 +143,9 @@ func (database Database) GetAllProjects(workerId int64) *[]Project {
rows, err = db.Query(`SELECT
Id, priority, name, clone_url, git_repo, version, motd, public, hidden, COALESCE(chain,0)
FROM project
LEFT JOIN worker_has_access_to_project whatp ON whatp.project = id
WHERE NOT hidden OR whatp.worker = $1
ORDER BY name`, workerId)
LEFT JOIN manager_has_role_on_project mhrop ON mhrop.project = id AND mhrop.manager=$1
WHERE NOT hidden OR mhrop.role & 1 = 1 OR (SELECT tracker_admin FROM manager WHERE id=$1)
ORDER BY name`, managerId)
}
handleErr(err)