如何拥有一个 rails 管理员并且只有 1 个管理员可以编辑和创建新帖子

How to have a rails admin and only 1 admin that can edit & create new posts

我正在尝试创建一个简单的页面,任何访问者都可以在其中阅读每周的帖子。我希望只有 1 位管理员可以编辑或创建新帖子。

我将如何着手创建它?

我从设计开始,但理论上任何人都可以转到 new_user_registration 路径并创建一个可以访问编辑和新操作的新用户。我如何才能限制在我创建的帐户之后创建任何新帐户?或者理想地限制任何非管理员用户可以使用的操作?

我查看了 Pundit 的授权,但似乎对于这样一个简单的任务来说太过分了,有没有更简单的方法来使用 Rails?

例如,您只需向用户模型添加一个新属性即可定义实例化用户是否为管理员。我们称此属性为 isAdmin 在您的编辑控制器中,您可以执行以下操作:

if user.isAdmin==true
# your edition code here
else
#redirect
end

如果您只想拥有 1 个用户、一个管理员、一个登录名和密码,并且没有其他用户帐户,那么我会推荐 HTTP Digest Auth,rails out of -开箱即用,不需要任何额外的 gem 或插件。 (或 HTTP Basic Auth,但 digest auth 更安​​全。)

以下大部分内容摘自 rails 网站上的 action controller guide

在config/routes.rb:

resources :posts

在controllers/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 操作位于网站的 'admin/' 部分:

在config/routes.rb:

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

这仍然会将所有 post 相关的请求定向到 PostsController。