2015-01-31 81 views
0

我想创建一个简单的页面,任何访客都可以阅读每周的帖子。我想只有1个管理员可以编辑或创建新帖子。如何拥有一个rails管理员,只有一个管理员可以编辑和创建新帖子

我该如何去创造这个?

我从设计开始,但理论上任何人都可以进入new_user_registration路径并创建一个新用户,该用户可以访问编辑&新操作。我将如何限制创建的帐户之后创建的任何新帐户?或理想地限制任何不是管理员的用户可以使用的操作?

我看着Pundit进行授权,但对于这样一个简单的任务来说似乎太多了,是否有更简单的方法来使用Rails执行此操作?

回答

0

如果你只是想有个用户,一个管理员,使用登录名和密码,并没有其他用户帐户,那么我会推荐HTTP Digest Auth,它可以被开箱即用的Rails支持,并且不需要任何额外的宝石或插件。 (或HTTP基本身份验证,但摘要身份验证稍微安全一些。)

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

在配置/ 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 

如果你愿意,你可以修改的路线,以便新/创建/编辑/更新/销毁行动是在 '管理/' 的网站的一部分:

在配置/ routes.rb中:

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

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

+0

我不完全相信我明白这一点。我需要在我的控制台中创建管理员帐户和密码吗?否则验证方法将如何获取密码进行验证? – coderwannabe2 2015-02-01 10:39:06

+0

我不确定我是否知道你的意思,但'authenticate_or_request_with_http_digest'需要一个块;该块被赋予用户名作为第一个参数,并且必须返回密码。 – 2015-02-08 20:35:51

0

例如,您可以简单地向用户模型添加一个新属性,以定义实例化用户是否为管理员。让我们把这个属性isAdmin 一个在你的编辑器,你可以做到以下几点:

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

嗯所以添加一个管理列到用户模型,然后我将不得不通过我的控制台添加到特定用户的管理员属性是否正确? – coderwannabe2 2015-01-31 19:03:39

+0

是的,使用控制台将是一个选项。 – 2015-01-31 19:05:56

+0

另一种选择是什么?我想不出任何其他的选择... – coderwannabe2 2015-02-01 10:05:23

相关问题