我正在尝试创建一个简单的页面,任何访问者都可以在其中阅读每周的帖子。我希望只有 1 位管理员可以编辑或创建新帖子。
我将如何去创造这个?
我从设计开始,但理论上任何人都可以转到 new_user_registration 路径并创建一个可以访问编辑和新操作的新用户。在我创建一个帐户之后,我如何能够限制创建任何新帐户?或者理想情况下限制任何非管理员用户可以使用的操作?
我向 Pundit 寻求授权,但对于这样一个简单的任务来说似乎太多了,有没有更简单的方法可以用 Rails 做到这一点?
我正在尝试创建一个简单的页面,任何访问者都可以在其中阅读每周的帖子。我希望只有 1 位管理员可以编辑或创建新帖子。
我将如何去创造这个?
我从设计开始,但理论上任何人都可以转到 new_user_registration 路径并创建一个可以访问编辑和新操作的新用户。在我创建一个帐户之后,我如何能够限制创建任何新帐户?或者理想情况下限制任何非管理员用户可以使用的操作?
我向 Pundit 寻求授权,但对于这样一个简单的任务来说似乎太多了,有没有更简单的方法可以用 Rails 做到这一点?
如果您只想拥有 1 个用户,一个管理员,具有登录名和密码,并且没有其他用户帐户,那么我会推荐 HTTP Digest Auth,它由 rails 开箱即用支持并且不需要任何额外的宝石或插件。(或 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
如果需要,您可以修改路由,以便新/创建/编辑/更新/销毁操作位于网站的“管理员/”部分:
在 config/routes.rb 中:
scope '/admin' do
resources :posts, except: [:index, :show]
end
resources :posts, only: [:index, :show]
这仍然会将所有与帖子相关的请求定向到 PostsController。
例如,您只需向您的用户模型添加一个新属性,该属性定义实例化的用户是否是管理员。让我们将此属性称为 isAdmin 在您的编辑控制器中您可以执行以下操作:
if user.isAdmin==true
# your edition code here
else
#redirect
end