【问题标题】:How to have a rails admin and only 1 admin that can edit & create new posts如何拥有一个 Rails 管理员,并且只有 1 个管理员可以编辑和创建新帖子
【发布时间】:2015-01-31 18:45:26
【问题描述】:

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

我将如何创建它?

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

我向 Pundit 寻求授权,但对于这样一个简单的任务来说似乎太多了,有没有更简单的方法可以用 Rails 做到这一点?

【问题讨论】:

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


    【解决方案1】:

    如果您只想拥有 1 个用户,一个管理员,具有登录名和密码,并且没有其他用户帐户,那么我会推荐 HTTP Digest Auth,它由 rails 开箱即用支持并且不不需要任何额外的宝石或插件。 (或 HTTP 基本身份验证,但摘要式身份验证更安全。)

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

    在 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。

    【讨论】:

    • 我不完全确定我理解这一点。我是否必须在我的控制台中创建管理员帐户和密码。否则,authenticate 方法如何获取密码进行身份验证?
    • 我不确定我是否明白你的意思,但authenticate_or_request_with_http_digest 需要阻止;该块的第一个参数是用户名,并且必须返回密码。
    【解决方案2】:

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

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

    【讨论】:

    • 嗯,所以向用户模型添加一个管理列,然后我必须通过我的控制台将管理属性添加到特定用户,这是正确的吗?
    • 是的,可以选择使用控制台。
    • 哦,这是个好问题。例如,您可以使用另一个专用控制器(和视图)让用户要求成为管理员,如果您接受,isAdmin 变量将设置为 true。
    猜你喜欢
    • 1970-01-01
    • 2019-08-30
    • 2019-12-11
    • 1970-01-01
    • 2011-06-08
    • 2015-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多