summaryrefslogtreecommitdiff
path: root/app/models/project_group_link.rb
diff options
context:
space:
mode:
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2016-03-11 17:47:05 +0100
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>2016-03-11 17:47:05 +0100
commitea5f4cae53eb571b250fcbaa3649cefe3083a636 (patch)
tree6bfbbfae455e1ad73c30b3127f62a79da121ed67 /app/models/project_group_link.rb
parent29ac9f64ea6d0a9e5a7615a9597c668dd129f5ae (diff)
downloadgitlab-ce-ea5f4cae53eb571b250fcbaa3649cefe3083a636.tar.gz
Bring ProjectGroupLink model and migrations from EE
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Diffstat (limited to 'app/models/project_group_link.rb')
-rw-r--r--app/models/project_group_link.rb36
1 files changed, 36 insertions, 0 deletions
diff --git a/app/models/project_group_link.rb b/app/models/project_group_link.rb
new file mode 100644
index 00000000000..e52a6bd7c84
--- /dev/null
+++ b/app/models/project_group_link.rb
@@ -0,0 +1,36 @@
+class ProjectGroupLink < ActiveRecord::Base
+ GUEST = 10
+ REPORTER = 20
+ DEVELOPER = 30
+ MASTER = 40
+
+ belongs_to :project
+ belongs_to :group
+
+ validates :project_id, presence: true
+ validates :group_id, presence: true
+ validates :group_id, uniqueness: { scope: [:project_id], message: "already shared with this group" }
+ validates :group_access, presence: true
+ validates :group_access, inclusion: { in: Gitlab::Access.values }, presence: true
+ validate :different_group
+
+ def self.access_options
+ Gitlab::Access.options
+ end
+
+ def self.default_access
+ DEVELOPER
+ end
+
+ def human_access
+ self.class.access_options.key(self.group_access)
+ end
+
+ private
+
+ def different_group
+ if self.group && self.project && self.project.group == self.group
+ errors.add(:base, "Project cannot be shared with the project it is in.")
+ end
+ end
+end