如何拥有一个rails admin,只有一个管理员可以编辑&创建新帖子

时间:2015-01-31 18:45:26

标签: ruby-on-rails ruby-on-rails-4 devise authorization pundit

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

我将如何创建这个?

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

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

如果你只想拥有一个用户,一个管理员,一个登录名和密码,而没有其他用户帐户,那么我会推荐HTTP Digest Auth,这是由开箱即用的rails支持的不需要任何额外的宝石或插件。 (或HTTP Basic Auth,但摘要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

如果需要,您可以修改路由,以便新的/ create / edit / update / destroy操作位于网站的“admin /”部分:

在config / routes.rb中:

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

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