diff --git a/app/views/roles/_form.html.erb b/app/views/roles/_form.html.erb
index d028c2f1c..0e55b0c39 100644
--- a/app/views/roles/_form.html.erb
+++ b/app/views/roles/_form.html.erb
@@ -18,15 +18,52 @@
<% perms_by_module = @role.setable_permissions.group_by {|p| p.project_module.to_s} %>
<% perms_by_module.keys.sort.each do |mod| %>
-
diff --git a/lib/redmine.rb b/lib/redmine.rb
index 64b39145e..17234b54f 100644
--- a/lib/redmine.rb
+++ b/lib/redmine.rb
@@ -89,29 +89,28 @@ end
Redmine::AccessControl.map do |map|
map.permission :view_project, {:projects => [:show], :activities => [:index]}, :public => true, :read => true
map.permission :search_project, {:search => :index}, :public => true, :read => true
- map.permission :add_project, {:projects => [:new, :create]}, :require => :loggedin
- map.permission :edit_project, {:projects => [:settings, :edit, :update]}, :require => :member
- map.permission :close_project, {:projects => [:close, :reopen]}, :require => :member, :read => true
- map.permission :select_project_modules, {:projects => :modules}, :require => :member
- map.permission :select_contest_modules, {:contests => :modules}, :require => :member
- map.permission :manage_members, {:projects => :settings, :members => [:index, :show, :create, :update, :destroy, :autocomplete]}, :require => :member
- map.permission :manage_versions, {:projects => :settings, :versions => [:new, :create, :edit, :update, :close_completed, :destroy]}, :require => :member
- map.permission :add_subprojects, {:projects => [:new, :create]}, :require => :member
+ map.permission :add_project, {:projects => [:new, :create]}, :require => :loggedin ,:belong_to_project => true
+ map.permission :edit_project, {:projects => [:settings, :edit, :update]}, :require => :member ,:belong_to_project => true
+ map.permission :close_project, {:projects => [:close, :reopen]}, :require => :member, :read => true ,:belong_to_project => true
+ map.permission :select_project_modules, {:projects => :modules}, :require => :member ,:belong_to_project => true
+ map.permission :select_contest_modules, {:contests => :modules}, :require => :member ,:belong_to_contest => true
+ map.permission :manage_members, {:projects => :settings, :members => [:index, :show, :create, :update, :destroy, :autocomplete]}, :require => :member ,:belong_to_project => true
+ map.permission :manage_versions, {:projects => :settings, :versions => [:new, :create, :edit, :update, :close_completed, :destroy]}, :require => :member ,:belong_to_project => true
+ map.permission :add_subprojects, {:projects => [:new, :create]}, :require => :member ,:belong_to_project => true
map.permission :view_journals_for_messages, {:gantts => [:show, :update]}, :read => true
- map.permission :quote_project, {},:require => :member
- map.permission :is_manager,{},:require => :member
- map.permission :as_teacher,{},:require => :member
- map.permission :as_student,{},:require => :member
+ map.permission :quote_project, {},:require => :member,:belong_to_contest => true
+ map.permission :is_manager,{},:require => :member ,:belong_to_project => true
+ map.permission :as_teacher,{},:require => :member ,:belong_to_course => true
+ map.permission :as_student,{},:require => :member ,:belong_to_course => true
#课程权限模块
- #added by nwb
map.permission :view_course, {:courses => [:show], :activities => [:index]}, :public => true, :read => true
map.permission :search_course, {:search => :index}, :public => true, :read => true
- map.permission :add_course, {:courses => [:new, :create]}, :require => :loggedin
- map.permission :edit_course, {:courses => [:settings, :edit, :update]}, :require => :member
- map.permission :close_course, {:courses => [:close, :reopen]}, :require => :member, :read => true
- map.permission :select_course_modules, {:courses => :modules}, :require => :member
- map.permission :view_course_journals_for_messages, {:courses => :feedback}, :require => :member,:read => true
+ map.permission :add_course, {:courses => [:new, :create]}, :require => :loggedin ,:belong_to_course => true
+ map.permission :edit_course, {:courses => [:settings, :edit, :update]}, :require => :member ,:belong_to_course => true
+ map.permission :close_course, {:courses => [:close, :reopen]}, :require => :member, :read => true ,:belong_to_course => true
+ map.permission :select_course_modules, {:courses => :modules}, :require => :member ,:belong_to_course => true
+ map.permission :view_course_journals_for_messages, {:courses => :feedback}, :require => :member,:read => true ,:belong_to_course => true
map.course_module :files do |map|
map.permission :manage_files, {:files => [:new, :create]}, :require => :loggedin
diff --git a/lib/redmine/access_control.rb b/lib/redmine/access_control.rb
index e71c0090a..efcaca627 100644
--- a/lib/redmine/access_control.rb
+++ b/lib/redmine/access_control.rb
@@ -126,7 +126,9 @@ module Redmine
@course_module = options[:course_module]
@project_module = options[:project_module]
@contest_module = options[:contest_module]
-
+ @belong_to_project = options[:belong_to_project] || false
+ @belong_to_course = options[:belong_to_course] || false
+ @belong_to_contest =options[:belong_to_contest] || false
hash.each do |controller, actions|
if actions.is_a? Array
@actions << actions.collect {|action| "#{controller}/#{action}"}
@@ -152,6 +154,19 @@ module Redmine
def read?
@read
end
+
+ def belong_to_project?
+ @belong_to_project
+ end
+
+ def belong_to_course?
+ @belong_to_course
+ end
+
+ def belong_to_contest?
+ @belong_to_contest
+ end
+
end
end
end