summaryrefslogtreecommitdiff
path: root/app/models/ability.rb
diff options
context:
space:
mode:
authorgitlabhq <m@gitlabhq.com>2011-10-09 00:36:38 +0300
committergitlabhq <m@gitlabhq.com>2011-10-09 00:36:38 +0300
commit9ba1224867665844b117fa037e1465bb706b3685 (patch)
tree52fbfc1cdb55df21843965479c97be0c91121a9a /app/models/ability.rb
parent93efff945215a4407afcaf0cba15ac601b56df0d (diff)
downloadgitlab-ce-9ba1224867665844b117fa037e1465bb706b3685.tar.gz
init commit
Diffstat (limited to 'app/models/ability.rb')
-rw-r--r--app/models/ability.rb34
1 files changed, 34 insertions, 0 deletions
diff --git a/app/models/ability.rb b/app/models/ability.rb
new file mode 100644
index 00000000000..0a2c45f1289
--- /dev/null
+++ b/app/models/ability.rb
@@ -0,0 +1,34 @@
+class Ability
+ def self.allowed(object, subject)
+ case subject.class.name
+ when "Project" then project_abilities(object, subject)
+ else []
+ end
+ end
+
+ def self.project_abilities(user, project)
+ rules = []
+
+ rules << [
+ :read_project,
+ :read_issue,
+ :read_team_member,
+ :read_note
+ ] if project.readers.include?(user)
+
+ rules << [
+ :write_project,
+ :write_issue,
+ :write_note
+ ] if project.writers.include?(user)
+
+ rules << [
+ :admin_project,
+ :admin_issue,
+ :admin_team_member,
+ :admin_note
+ ] if project.admins.include?(user)
+
+ rules.flatten
+ end
+end