Как иметь администратора рельсов и только 1 администратора, который может редактировать и создавать новые сообщения

Я пытаюсь создать простую страницу, где любой посетитель может читать еженедельные сообщения. Я хочу, чтобы только 1 администратор мог редактировать или создавать новые сообщения.

Как мне это создать?

Я начал с разработки, но теоретически любой может перейти по пути new_user_registration и создать нового пользователя, который будет иметь доступ к редактированию и новым действиям. Как я могу запретить создание любых новых учетных записей после той, которую я создаю? Или в идеале ограничить действия, которые может использовать любой пользователь, не являющийся администратором?

Я заглянул в Pundit для авторизации, но кажется, что это слишком много для такой простой задачи, есть ли более простой способ сделать это с помощью Rails?


person coderwannabe2    schedule 31.01.2015    source источник


Ответы (2)


Если вы просто хотите иметь 1 пользователя, одного администратора, с логином и паролем и без других учетных записей пользователей, то я бы рекомендовал HTTP Digest Auth, который поддерживается рельсами из коробки и не требует любые дополнительные драгоценные камни или плагины. (Или базовая HTTP-аутентификация, но дайджест-аутентификация немного более безопасна.)

Большая часть следующего взята из руководства по контроллеру действий на веб-сайте rails. .

В config/routes.rb:

resources :posts

В контроллерах/posts_controller.rb:

class PostsController < ActionController::Base
USERS = { "admin" => "password" }

before_action :authenticate, except: [:index, :show]

# actions here (index, show, new, create, edit, update, destroy) 

private
  def authenticate
    authenticate_or_request_with_http_digest do |username|
      USERS[username]
    end
  end
end

Если хотите, вы можете изменить маршруты так, чтобы действия new/create/edit/update/destroy находились в административной части веб-сайта:

В config/routes.rb:

scope '/admin' do
  resources :posts, except: [:index, :show]
end
resources :posts, only: [:index, :show]

Это по-прежнему будет направлять все запросы, связанные с публикацией, в PostsController.

person Michael Hewson    schedule 31.01.2015
comment
Я не совсем уверен, что понимаю это. Должен ли я создать учетную запись администратора и пароль в моей консоли. В противном случае, как метод аутентификации получит пароль для аутентификации? - person coderwannabe2; 01.02.2015
comment
Я не уверен, что понимаю, что вы имеете в виду, но authenticate_or_request_with_http_digest берет блок; этому блоку в качестве первого аргумента дается имя пользователя, и он должен возвращать пароль. - person Michael Hewson; 08.02.2015

Вы просто можете добавить новый атрибут в свою модель пользователя, который определяет, например, является ли созданный пользователь администратором или нет. Давайте назовем этот атрибут isAdmin. В вашем контроллере редактирования вы можете сделать следующее:

if user.isAdmin==true
# your edition code here
else
#redirect
end
person Walid Da.    schedule 31.01.2015
comment
Хммм, так что добавьте столбец администратора в пользовательскую модель, а затем мне нужно будет добавить свойство администратора для конкретного пользователя через мою консоль, правильно ли это? - person coderwannabe2; 31.01.2015
comment
Да, использование консоли было бы вариантом. - person Walid Da.; 31.01.2015
comment
О, это хороший вопрос. Например, вы можете заставить пользователей запрашивать права администратора, используя другой выделенный контроллер (и представления), и если вы согласитесь, для переменной isAdmin будет установлено значение true. - person Walid Da.; 01.02.2015