vikunja-api/pkg/models/label_task_rights.go

78 lines
2.4 KiB
Go
Raw Normal View History

// Vikunja is a todo-list application to facilitate your life.
// Copyright 2018-2019 Vikunja and contributors. All rights reserved.
2018-12-31 02:18:41 +01:00
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
2018-12-31 02:18:41 +01:00
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
2018-12-31 02:18:41 +01:00
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <https://www.gnu.org/licenses/>.
2018-12-31 02:18:41 +01:00
package models
import (
"code.vikunja.io/web"
)
// CanCreate checks if a user can add a label to a task
2019-03-24 13:35:50 +01:00
func (lt *LabelTask) CanCreate(a web.Auth) (bool, error) {
2018-12-31 02:18:41 +01:00
label, err := getLabelByIDSimple(lt.LabelID)
if err != nil {
2019-03-24 13:35:50 +01:00
return false, err
2018-12-31 02:18:41 +01:00
}
2019-03-24 13:35:50 +01:00
hasAccessTolabel, err := label.hasAccessToLabel(a)
if err != nil || !hasAccessTolabel { // If the user doesn't have access to the label, we can error out here
return false, err
}
canDoLabelTask, err := canDoLabelTask(lt.TaskID, a)
if err != nil {
return false, err
}
return hasAccessTolabel && canDoLabelTask, nil
2018-12-31 02:18:41 +01:00
}
// CanDelete checks if a user can delete a label from a task
2019-03-24 13:35:50 +01:00
func (lt *LabelTask) CanDelete(a web.Auth) (bool, error) {
canDoLabelTask, err := canDoLabelTask(lt.TaskID, a)
if err != nil {
return false, err
}
if !canDoLabelTask {
return false, nil
2018-12-31 02:18:41 +01:00
}
// We don't care here if the label exists or not. The only relevant thing here is if the relation already exists,
// throw an error.
exists, err := x.Exist(&LabelTask{LabelID: lt.LabelID, TaskID: lt.TaskID})
if err != nil {
2019-03-24 13:35:50 +01:00
return false, err
2018-12-31 02:18:41 +01:00
}
2019-03-24 13:35:50 +01:00
return exists, err
2018-12-31 02:18:41 +01:00
}
2019-01-10 00:08:12 +01:00
// CanCreate determines if a user can update a labeltask
2019-03-24 13:35:50 +01:00
func (ltb *LabelTaskBulk) CanCreate(a web.Auth) (bool, error) {
2019-01-10 00:08:12 +01:00
return canDoLabelTask(ltb.TaskID, a)
}
2018-12-31 02:18:41 +01:00
// Helper function to check if a user can write to a task
// + is able to see the label
// always the same check for either deleting or adding a label to a task
2019-03-24 13:35:50 +01:00
func canDoLabelTask(taskID int64, a web.Auth) (bool, error) {
2018-12-31 02:18:41 +01:00
// A user can add a label to a task if he can write to the task
2019-05-22 19:48:48 +02:00
task, err := GetTaskByIDSimple(taskID)
2018-12-31 02:18:41 +01:00
if err != nil {
2019-03-24 13:35:50 +01:00
return false, err
2018-12-31 02:18:41 +01:00
}
return task.CanUpdate(a)
}