diff --git a/app/controllers/admin/admin_users_controller.rb b/app/controllers/admin/admin_users_controller.rb new file mode 100644 index 0000000..82b1371 --- /dev/null +++ b/app/controllers/admin/admin_users_controller.rb @@ -0,0 +1,45 @@ +class Admin::AdminUsersController < Admin::BaseController + before_action :require_superadmin! + + def index + @superadmins = User.where(admin_level: :superadmin).order(:slack_username) + @admins = User.where(admin_level: :admin).order(:slack_username) + @viewers = User.where(admin_level: :viewer).order(:slack_username) + end + + def update + @user = User.find(params[:id]) + new_level = params[:admin_level] + + if @user == current_user + redirect_to admin_admin_users_path, alert: "you cannot change your own admin level" + return + end + + if @user.set_admin_level(new_level) + redirect_to admin_admin_users_path, notice: "#{@user.display_name}'s admin level updated to #{new_level}." + else + redirect_to admin_admin_users_path, alert: "failed to update admin level." + end + end + + def search + query = params[:q].to_s.strip + @users = if query.present? + User.where("slack_username ILIKE :q OR username ILIKE :q OR slack_uid ILIKE :q", q: "%#{query}%") + .limit(20) + else + User.none + end + + render partial: "search_results", locals: { users: @users } + end + + private + + def require_superadmin! + unless current_user&.admin_level_superadmin? + redirect_to root_path, alert: "no perms lmaoo" + end + end +end diff --git a/app/views/admin/admin_users/_search_results.html.erb b/app/views/admin/admin_users/_search_results.html.erb new file mode 100644 index 0000000..74217e5 --- /dev/null +++ b/app/views/admin/admin_users/_search_results.html.erb @@ -0,0 +1,39 @@ +<% if users.any? %> +
nuthin found
+<% end %> diff --git a/app/views/admin/admin_users/index.html.erb b/app/views/admin/admin_users/index.html.erb new file mode 100644 index 0000000..d12afa2 --- /dev/null +++ b/app/views/admin/admin_users/index.html.erb @@ -0,0 +1,200 @@ +Who can access the admin panel?
+| User | +Slack ID | +Actions | +
|---|---|---|
|
+
+
+ |
+ <%= user.slack_uid || "N/A" %> | +
+ <% if user != current_user %>
+
+ <%= button_to "→ Admin", admin_admin_user_path(user, admin_level: "admin"),
+ method: :patch,
+ class: "px-3 py-1 bg-yellow-600 hover:bg-yellow-500 text-white text-sm font-medium rounded transition-colors cursor-pointer",
+ data: { confirm: "Demote #{user.display_name} to Admin?" } %>
+ <%= button_to "→ Viewer", admin_admin_user_path(user, admin_level: "viewer"),
+ method: :patch,
+ class: "px-3 py-1 bg-blue-600 hover:bg-blue-500 text-white text-sm font-medium rounded transition-colors cursor-pointer",
+ data: { confirm: "Demote #{user.display_name} to Viewer?" } %>
+ <%= button_to "→ Default", admin_admin_user_path(user, admin_level: "default"),
+ method: :patch,
+ class: "px-3 py-1 bg-gray-600 hover:bg-gray-500 text-white text-sm font-medium rounded transition-colors cursor-pointer",
+ data: { confirm: "Remove #{user.display_name}'s admin privileges?" } %>
+
+ <% else %>
+ Cannot modify yourself
+ <% end %>
+ |
+
No superadmins found!
+ <% end %> +| User | +Slack ID | +Actions | +
|---|---|---|
|
+
+
+ |
+ <%= user.slack_uid || "N/A" %> | +
+
+ <%= button_to "→ Superadmin", admin_admin_user_path(user, admin_level: "superadmin"),
+ method: :patch,
+ class: "px-3 py-1 bg-red-600 hover:bg-red-500 text-white text-sm font-medium rounded transition-colors cursor-pointer",
+ data: { confirm: "Promote #{user.display_name} to Superadmin?" } %>
+ <%= button_to "→ Viewer", admin_admin_user_path(user, admin_level: "viewer"),
+ method: :patch,
+ class: "px-3 py-1 bg-blue-600 hover:bg-blue-500 text-white text-sm font-medium rounded transition-colors cursor-pointer",
+ data: { confirm: "Demote #{user.display_name} to Viewer?" } %>
+ <%= button_to "→ Default", admin_admin_user_path(user, admin_level: "default"),
+ method: :patch,
+ class: "px-3 py-1 bg-gray-600 hover:bg-gray-500 text-white text-sm font-medium rounded transition-colors cursor-pointer",
+ data: { confirm: "Remove #{user.display_name}'s admin privileges?" } %>
+
+ |
+
No admins found
+ <% end %> +| User | +Slack ID | +Actions | +
|---|---|---|
|
+
+
+ |
+ <%= user.slack_uid || "N/A" %> | +
+
+ <%= button_to "→ Superadmin", admin_admin_user_path(user, admin_level: "superadmin"),
+ method: :patch,
+ class: "px-3 py-1 bg-red-600 hover:bg-red-500 text-white text-sm font-medium rounded transition-colors cursor-pointer",
+ data: { confirm: "Promote #{user.display_name} to Superadmin?" } %>
+ <%= button_to "→ Admin", admin_admin_user_path(user, admin_level: "admin"),
+ method: :patch,
+ class: "px-3 py-1 bg-yellow-600 hover:bg-yellow-500 text-white text-sm font-medium rounded transition-colors cursor-pointer",
+ data: { confirm: "Promote #{user.display_name} to Admin?" } %>
+ <%= button_to "→ Default", admin_admin_user_path(user, admin_level: "default"),
+ method: :patch,
+ class: "px-3 py-1 bg-gray-600 hover:bg-gray-500 text-white text-sm font-medium rounded transition-colors cursor-pointer",
+ data: { confirm: "Remove #{user.display_name}'s viewer privileges?" } %>
+
+ |
+
No viewers found
+ <% end %> +