summaryrefslogtreecommitdiffstats
path: root/app/models/role.rb
diff options
context:
space:
mode:
authorJean-Philippe Lang <jp_lang@yahoo.fr>2008-09-13 16:31:11 +0000
committerJean-Philippe Lang <jp_lang@yahoo.fr>2008-09-13 16:31:11 +0000
commitcc643ce932b2abdc56c4d1933c02806ca57ddefa (patch)
treeeeaaba02f0eee8ce2d06a10609ccffebdfb1ee4d /app/models/role.rb
parent6ef6459630cfd8fd5af31d527c0043243ef2cb09 (diff)
downloadredmine-cc643ce932b2abdc56c4d1933c02806ca57ddefa.tar.gz
redmine-cc643ce932b2abdc56c4d1933c02806ca57ddefa.zip
Merged nbc branch @ r1812 (commit access permission and reposman improvements).
git-svn-id: http://redmine.rubyforge.org/svn/trunk@1814 e93f8b46-1217-0410-a6f0-8f06a7374b81
Diffstat (limited to 'app/models/role.rb')
-rw-r--r--app/models/role.rb27
1 files changed, 25 insertions, 2 deletions
diff --git a/app/models/role.rb b/app/models/role.rb
index 6f1fb4768..5ff9470f9 100644
--- a/app/models/role.rb
+++ b/app/models/role.rb
@@ -19,6 +19,11 @@ class Role < ActiveRecord::Base
# Built-in roles
BUILTIN_NON_MEMBER = 1
BUILTIN_ANONYMOUS = 2
+
+ named_scope :builtin, lambda { |*args|
+ compare = 'not' if args.first == true
+ { :conditions => "#{compare} builtin = 0" }
+ }
before_destroy :check_deletable
has_many :workflows, :dependent => :delete_all do
@@ -36,7 +41,7 @@ class Role < ActiveRecord::Base
has_many :members
acts_as_list
- serialize :permissions
+ serialize :permissions, Array
attr_protected :builtin
validates_presence_of :name
@@ -49,9 +54,27 @@ class Role < ActiveRecord::Base
end
def permissions=(perms)
- perms = perms.collect {|p| p.to_sym unless p.blank? }.compact if perms
+ perms = perms.collect {|p| p.to_sym unless p.blank? }.compact.uniq if perms
write_attribute(:permissions, perms)
end
+
+ def add_permission!(*perms)
+ self.permissions = [] unless permissions.is_a?(Array)
+
+ permissions_will_change!
+ perms.each do |p|
+ p = p.to_sym
+ permissions << p unless permissions.include?(p)
+ end
+ save!
+ end
+
+ def remove_permission!(*perms)
+ return unless permissions.is_a?(Array)
+ permissions_will_change!
+ perms.each { |p| permissions.delete(p.to_sym) }
+ save!
+ end
def <=>(role)
position <=> role.position