diff --git a/app/controllers/roles_controller.rb b/app/controllers/roles_controller.rb index 8b2b71c..465048e 100644 --- a/app/controllers/roles_controller.rb +++ b/app/controllers/roles_controller.rb @@ -2,60 +2,63 @@ respond_to :html after_action :verify_authorized - def create - @role = Role.new(params[:role]) + def create + @role = Role.new(role_params) authorize @role - @role.access_level = params[:role][:access_level].to_i - if params[:role][:email].present? - message = _('User added to project') - if @role.save - if @role.user.nil? then - if User.find_by_email(params[:role][:email]).nil? then - User.invite!(email: params[:role][:email]) - message = _('Invitation issued successfully.') - @role.user = User.find_by_email(params[:role][:email]) - @role.save - else - @role.user = User.find_by_email(params[:role][:email]) - @role.save - UserMailer.sharing_notification(@role).deliver - end - else - UserMailer.sharing_notification(@role).deliver - end - flash[:notice] = message - redirect_to controller: 'plans', action: 'share', id: @role.plan.slug - else - render action: "new" - end - else - flash[:notice] = _('Please enter an email address') - redirect_to controller: 'plans', action: 'share', id: @role.plan.slug - end - end + + @role.access_level = role_params[:access_level].to_i + if role_params[:email].present? + message = _('User added to project') + if @role.save + if @role.user.nil? then + if User.find_by_email(role_params[:email]).nil? then + User.invite!(email: role_params[:email]) + message = _('Invitation issued successfully.') + @role.user = User.find_by_email(role_params[:email]) + @role.save + else + @role.user = User.find_by_email(role_params[:email]) + @role.save + UserMailer.sharing_notification(@role).deliver + end + else + UserMailer.sharing_notification(@role).deliver + end + redirect_to share_plan_path(@role.plan), notice: message + else + redirect_to share_plan_path(@role.plan), notice: generate_error_notice(@role) + end + else + redirect_to share_plan_path(@role.plan), _('Please enter an email address') + end + end - def update - @role = Role.find(params[:id]) + def update + @role = Role.find(params[:id]) authorize @role - @role.access_level = params[:role][:access_level].to_i - if @role.update_attributes(params[:role]) - flash[:notice] = _('Sharing details successfully updated.') - UserMailer.permissions_change_notification(@role).deliver - redirect_to controller: 'plans', action: 'share', id: @role.plan.slug - else - render action: "edit" - end - end + @role.access_level = role_params[:access_level].to_i + if @role.update_attributes(role_params) + UserMailer.permissions_change_notification(@role).deliver + redirect_to share_plan_path(@role.plan), notice: _('Sharing details successfully updated.') + else + redirect_to share_plan_path(@role.plan), notice: generate_error_notice(@role) + end + end - def destroy - @role = Role.find(params[:id]) + def destroy + @role = Role.find(params[:id]) authorize @role - user = @role.user - plan = @role.plan - @role.destroy + user = @role.user + plan = @role.plan + @role.destroy - flash[:notice] = _('Access removed') - UserMailer.project_access_removed_notification(user, plan).deliver - redirect_to controller: 'plans', action: 'share', id: @role.plan.slug - end + UserMailer.project_access_removed_notification(user, plan).deliver + redirect_to controller: 'plans', action: 'share', id: @role.plan.slug + redirect_to share_plan_path(@role.plan), notice: _('Access removed') + end + + private + def role_params + params.require(:role).permit(:plan_id, :access_level, user: [:email]) + end end \ No newline at end of file diff --git a/app/policies/role_policy.rb b/app/policies/role_policy.rb index 7aebf02..cf2b691 100644 --- a/app/policies/role_policy.rb +++ b/app/policies/role_policy.rb @@ -9,14 +9,14 @@ end def create? - @role.plan.administerable_by(@user.id) + @role.plan.administerable_by?(@user.id) end def update? - @role.plan.administerable_by(@user.id) + @role.plan.administerable_by?(@user.id) end def destroy? - @role.plan.administerable_by(@user.id) + @role.plan.administerable_by?(@user.id) end end \ No newline at end of file diff --git a/app/views/orgs/admin_edit.html.erb b/app/views/orgs/admin_edit.html.erb index 9bf8d6c..58ac1fd 100644 --- a/app/views/orgs/admin_edit.html.erb +++ b/app/views/orgs/admin_edit.html.erb @@ -63,7 +63,7 @@