diff --git a/app/controllers/admin/users_controller.rb b/app/controllers/admin/users_controller.rb index 6442315..d95747d 100644 --- a/app/controllers/admin/users_controller.rb +++ b/app/controllers/admin/users_controller.rb @@ -1,39 +1,44 @@ module Admin class UsersController < ApplicationController before_action :authenticate_user! before_action :admin_only! + # GET /users + def index + @users = User.all + end + # GET /users/orphans def orphans @users = User.orphans end # DELETE /users/:id def destroy @user = User.find(params[:id]) @user.destroy redirect_to orphans_admin_users_path, notice: "#{@user.email} was deleted." end def update_groups additions = 0 params.each_pair { |k, group_id| next if !k.start_with?('orphan-') _, id = k.split('-', 2) user = User.orphans.find_by_id(id) next if !user group = Group.find_by_id(group_id) next if !group user.groups << group additions += 1 } redirect_to :back, notice: "#{additions} users were assigned to groups" end end end diff --git a/app/views/admin/groups/index.html.erb b/app/views/admin/groups/index.html.erb index 8641bd8..84889d7 100644 --- a/app/views/admin/groups/index.html.erb +++ b/app/views/admin/groups/index.html.erb @@ -1,26 +1,28 @@ - +
- + <% @groups.each do |group| %> - - + <% end %>
Name Domains UsersControlsControls
<%= link_to group.name, group %> <%= @domain_count[group.id] || 0 %> <%= @membership_count[group.id] || 0 %><%= link_to_edit edit_admin_group_path(group) %><%= link_to_destroy admin_group_path(group), method: :delete, data: { confirm: 'Are you sure?' } %> + <%= link_to_edit edit_admin_group_path(group) %> + <%= link_to_destroy admin_group_path(group), method: :delete, data: { confirm: 'Are you sure?' } %> +

<%= link_to 'New Group »'.html_safe, new_admin_group_path, class: 'btn btn-lg btn-primary' %>

diff --git a/app/views/admin/users/index.html.erb b/app/views/admin/users/index.html.erb new file mode 100644 index 0000000..60156a0 --- /dev/null +++ b/app/views/admin/users/index.html.erb @@ -0,0 +1,23 @@ +
+ <%= bootstrap_form_tag(url: update_groups_admin_users_path, method: 'PUT', layout: :horizontal, label_col: 'col-sm-2', control_col: 'col-sm-4') do |f| %> + + + + + + + + + + <% @users.each do |u| %> + + + + + <% end %> + + +
UsernameGroupsControls
<%= u.email %><%= f.collection_select "orphan-#{u.id}", Group.all, :id, :name, hide_label: true, prompt: 'Group' %><%= link_to 'Delete', admin_user_path(u), method: :delete, data: { confirm: "Are sure you want to delete #{u.email}?"} %>
+ <%= f.submit 'Apply', class: 'btn btn-primary' %> + <% end %> +
diff --git a/app/views/shared/_nav.html.erb b/app/views/shared/_nav.html.erb index 222af44..b3aea61 100644 --- a/app/views/shared/_nav.html.erb +++ b/app/views/shared/_nav.html.erb @@ -1,64 +1,65 @@ diff --git a/config/routes.rb b/config/routes.rb index b85202c..6123d20 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,88 +1,89 @@ Rails.application.routes.draw do # Override devise user removal devise_scope :users do delete :users, to: redirect('/') end devise_for :users get '/auth/saml', to: 'auth#saml' root to: redirect('/domains') resources :users, only: [] do get :token, to: 'users#token', on: :member post :generate_token, to: 'users#generate_token', on: :member resources :domains, only: [] do put :mute, to: 'users#mute' put :unmute, to: 'users#unmute' put :mute, to: 'users#mute_all', on: :collection put :unmute, to: 'users#unmute_all', on: :collection end end resources :groups, only: [:show] do get :search_member, to: 'groups#search_member', on: :member post :members, to: 'groups#create_member', as: :create_member, on: :member delete 'member/:user_id', to: 'groups#destroy_member', as: :destroy_member, on: :member end resources :domains do get :edit_dnssec, to: 'domains#edit_dnssec', on: :member delete :full_destroy, to: 'domains#full_destroy', on: :member resources :records, except: [:index, :show] do # Reuse records#update instead of introducing new controller actions # # rubocop:disable Style/AlignHash put :disable, to: 'records#update', on: :member, defaults: { record: { disabled: true } } put :enable, to: 'records#update', on: :member, defaults: { record: { disabled: false } } put :editable, to: 'records#editable', on: :collection post :valid, to: 'records#valid', on: :collection post :bulk, to: 'records#bulk', on: :collection # rubocop:enable Style/AlignHash end end get '/records/search', to: 'records#search' # Admin namespace :admin do root to: redirect('/admin/groups') + resources :users, except: [:show] resources :groups, except: [:show] resources :jobs, only: [:index, :destroy] do put :done, to: 'jobs#update', on: :member, defaults: { job: { status: 1 } } put :pending, to: 'jobs#update', on: :member, defaults: { job: { status: 0 } } get '/type/:category', to: 'jobs#index', on: :collection, constraints: proc { |req| ['completed', 'pending'].include?(req.params[:category]) } end resources :users, only: [:destroy] do get :orphans, to: 'users#orphans', on: :collection put :update_groups, to: 'users#update_groups', on: :collection end end # API scope '/api' do get :ping, to: 'api#ping' get :whoami, to: 'api#whoami' get '/domain/:domain/list', to: 'api#list', constraints: { domain: /[^\/]+/} post '/domain/:domain/bulk', to: 'api#bulk', constraints: { domain: /[^\/]+/} get :domains, to: 'api#domains' end if WebDNS.settings[:api] # Private put 'private/replace_ds', to: 'private#replace_ds' put 'private/trigger_event', to: 'private#trigger_event' get 'private/zones', to: 'private#zones' get 'help/api', to: 'help#api' end