diff --git a/rails/app/controllers/admin/projects_controller.rb b/rails/app/controllers/admin/projects_controller.rb index 0abbb1cd3a..5ac1b08f0c 100644 --- a/rails/app/controllers/admin/projects_controller.rb +++ b/rails/app/controllers/admin/projects_controller.rb @@ -69,6 +69,13 @@ def edit # renders edit.html.haml end + # GET /admin/projects/1/classes + def classes + @project = Admin::Project.find(params[:id]) + authorize @project + # renders classes.html.haml + end + # POST /admin/projects def create authorize Admin::Project diff --git a/rails/app/helpers/navigation_helper.rb b/rails/app/helpers/navigation_helper.rb index b3e9df8ce4..b885ca0e51 100644 --- a/rails/app/helpers/navigation_helper.rb +++ b/rails/app/helpers/navigation_helper.rb @@ -263,7 +263,7 @@ def researcher_project_links links << { id: "/researcher_projects/#{project.id}", label: project.name, - url: url_for(project), + url: url_for([:classes, project]), } end diff --git a/rails/app/policies/admin/project_policy.rb b/rails/app/policies/admin/project_policy.rb index 92d71be95b..819a3c0b8c 100644 --- a/rails/app/policies/admin/project_policy.rb +++ b/rails/app/policies/admin/project_policy.rb @@ -81,4 +81,8 @@ def assign_to_material? def api_show? teacher? || admin? end + + def classes? + update_or_edit? || user.is_project_researcher?(record) + end end diff --git a/rails/app/views/admin/projects/classes.haml b/rails/app/views/admin/projects/classes.haml new file mode 100644 index 0000000000..1fab5adc9d --- /dev/null +++ b/rails/app/views/admin/projects/classes.haml @@ -0,0 +1,2 @@ +%div + %h1 Research Classes: #{@project.name} diff --git a/rails/config/routes.rb b/rails/config/routes.rb index 1d5111564b..0abae57286 100644 --- a/rails/config/routes.rb +++ b/rails/config/routes.rb @@ -224,6 +224,9 @@ resources :projects do resources :cohorts resources :project_links + member do + get :classes + end end resources :cohorts resources :project_links diff --git a/rails/spec/policies/admin/project_policy_spec.rb b/rails/spec/policies/admin/project_policy_spec.rb index 5875036d66..c0f549c305 100644 --- a/rails/spec/policies/admin/project_policy_spec.rb +++ b/rails/spec/policies/admin/project_policy_spec.rb @@ -191,8 +191,39 @@ end end + describe 'classes' do + describe 'a regular user' do + it 'should not permit access to classes page' do + expect(policy.classes?).to be false + end + end - end + describe 'as site admin' do + before(:each) do + allow(user).to receive(:has_role?).with('admin').and_return(true) + end + it 'should permit access to classses page' do + expect(policy.classes?).to be true + end + end + describe 'as a project admin' do + before(:each) do + allow(user).to receive(:is_project_admin?).with(project).and_return(true) + end + it 'should permit access to classses page' do + expect(policy.classes?).to be true + end + end + describe 'as a project researcher' do + before(:each) do + allow(user).to receive(:is_project_researcher?).with(project).and_return(true) + end + it 'should permit access to classses page' do + expect(policy.classes?).to be true + end + end + end + end end