mirror of
https://github.com/Freika/dawarich.git
synced 2026-01-11 01:31:39 -05:00
Add admin flag to users
This commit is contained in:
parent
646e5e729d
commit
b1f7b98c11
8 changed files with 33 additions and 10 deletions
|
|
@ -13,8 +13,8 @@ class ApplicationController < ActionController::Base
|
||||||
@unread_notifications ||= Notification.where(user: current_user).unread
|
@unread_notifications ||= Notification.where(user: current_user).unread
|
||||||
end
|
end
|
||||||
|
|
||||||
def authenticate_first_user!
|
def authenticate_admin!
|
||||||
return if current_user == User.first
|
return if current_user.admin?
|
||||||
|
|
||||||
redirect_to root_path, notice: 'You are not authorized to perform this action.', status: :unauthorized
|
redirect_to root_path, notice: 'You are not authorized to perform this action.', status: :unauthorized
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
class Settings::BackgroundJobsController < ApplicationController
|
class Settings::BackgroundJobsController < ApplicationController
|
||||||
before_action :authenticate_user!
|
before_action :authenticate_user!
|
||||||
before_action :authenticate_first_user!
|
before_action :authenticate_admin!
|
||||||
|
|
||||||
def index
|
def index
|
||||||
@queues = Sidekiq::Queue.all
|
@queues = Sidekiq::Queue.all
|
||||||
|
|
|
||||||
|
|
@ -2,7 +2,7 @@
|
||||||
|
|
||||||
class Settings::UsersController < ApplicationController
|
class Settings::UsersController < ApplicationController
|
||||||
before_action :authenticate_user!
|
before_action :authenticate_user!
|
||||||
before_action :authenticate_first_user!
|
before_action :authenticate_admin!
|
||||||
|
|
||||||
def create
|
def create
|
||||||
@user = User.new(
|
@user = User.new(
|
||||||
|
|
@ -12,7 +12,8 @@ class Settings::UsersController < ApplicationController
|
||||||
)
|
)
|
||||||
|
|
||||||
if @user.save
|
if @user.save
|
||||||
redirect_to settings_url, notice: "User was successfully created, email is #{@user.email}, password is \"password\"."
|
redirect_to settings_url,
|
||||||
|
notice: "User was successfully created, email is #{@user.email}, password is \"password\"."
|
||||||
else
|
else
|
||||||
redirect_to settings_url, notice: 'User could not be created.', status: :unprocessable_entity
|
redirect_to settings_url, notice: 'User could not be created.', status: :unprocessable_entity
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,9 @@ require 'sidekiq/web'
|
||||||
Rails.application.routes.draw do
|
Rails.application.routes.draw do
|
||||||
mount Rswag::Api::Engine => '/api-docs'
|
mount Rswag::Api::Engine => '/api-docs'
|
||||||
mount Rswag::Ui::Engine => '/api-docs'
|
mount Rswag::Ui::Engine => '/api-docs'
|
||||||
mount Sidekiq::Web => '/sidekiq'
|
authenticate :user, ->(u) { u.admin? } do
|
||||||
|
mount Sidekiq::Web => '/sidekiq'
|
||||||
|
end
|
||||||
|
|
||||||
resources :settings, only: :index
|
resources :settings, only: :index
|
||||||
namespace :settings do
|
namespace :settings do
|
||||||
|
|
|
||||||
13
db/data/20240713103122_make_first_user_admin.rb
Normal file
13
db/data/20240713103122_make_first_user_admin.rb
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
class MakeFirstUserAdmin < ActiveRecord::Migration[7.1]
|
||||||
|
def up
|
||||||
|
user = User.first
|
||||||
|
user.update!(admin: true)
|
||||||
|
end
|
||||||
|
|
||||||
|
def down
|
||||||
|
user = User.first
|
||||||
|
user.update!(admin: false)
|
||||||
|
end
|
||||||
|
end
|
||||||
7
db/migrate/20240713103051_add_admin_to_users.rb
Normal file
7
db/migrate/20240713103051_add_admin_to_users.rb
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
# frozen_string_literal: true
|
||||||
|
|
||||||
|
class AddAdminToUsers < ActiveRecord::Migration[7.1]
|
||||||
|
def change
|
||||||
|
add_column :users, :admin, :boolean, default: false
|
||||||
|
end
|
||||||
|
end
|
||||||
3
db/schema.rb
generated
3
db/schema.rb
generated
|
|
@ -10,7 +10,7 @@
|
||||||
#
|
#
|
||||||
# It's strongly recommended that you check this file into your version control system.
|
# It's strongly recommended that you check this file into your version control system.
|
||||||
|
|
||||||
ActiveRecord::Schema[7.1].define(version: 2024_07_12_141303) do
|
ActiveRecord::Schema[7.1].define(version: 2024_07_13_103051) do
|
||||||
# These are extensions that must be enabled in order to support this database
|
# These are extensions that must be enabled in order to support this database
|
||||||
enable_extension "plpgsql"
|
enable_extension "plpgsql"
|
||||||
|
|
||||||
|
|
@ -150,6 +150,7 @@ ActiveRecord::Schema[7.1].define(version: 2024_07_12_141303) do
|
||||||
t.string "api_key", default: "", null: false
|
t.string "api_key", default: "", null: false
|
||||||
t.string "theme", default: "dark", null: false
|
t.string "theme", default: "dark", null: false
|
||||||
t.jsonb "settings", default: {"fog_of_war_meters"=>"200", "meters_between_routes"=>"1000", "minutes_between_routes"=>"60"}
|
t.jsonb "settings", default: {"fog_of_war_meters"=>"200", "meters_between_routes"=>"1000", "minutes_between_routes"=>"60"}
|
||||||
|
t.boolean "admin", default: false
|
||||||
t.index ["email"], name: "index_users_on_email", unique: true
|
t.index ["email"], name: "index_users_on_email", unique: true
|
||||||
t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true
|
t.index ["reset_password_token"], name: "index_users_on_reset_password_token", unique: true
|
||||||
end
|
end
|
||||||
|
|
|
||||||
|
|
@ -91,11 +91,10 @@ RSpec.describe User, type: :model do
|
||||||
describe '#total_reverse_geocoded' do
|
describe '#total_reverse_geocoded' do
|
||||||
subject { user.total_reverse_geocoded }
|
subject { user.total_reverse_geocoded }
|
||||||
|
|
||||||
let(:import) { create(:import, user:) }
|
|
||||||
let!(:reverse_geocoded_point) do
|
let!(:reverse_geocoded_point) do
|
||||||
create(:point, country: 'Country', city: 'City', geodata: { some: 'data' }, import:)
|
create(:point, country: 'Country', city: 'City', geodata: { some: 'data' }, user:)
|
||||||
end
|
end
|
||||||
let!(:not_reverse_geocoded_point) { create(:point, country: 'Country', city: 'City', import:) }
|
let!(:not_reverse_geocoded_point) { create(:point, country: 'Country', city: 'City', user:) }
|
||||||
|
|
||||||
it 'returns number of reverse geocoded points' do
|
it 'returns number of reverse geocoded points' do
|
||||||
expect(subject).to eq(1)
|
expect(subject).to eq(1)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue