我使用Michael Hartl's Rails 3 Tutorial制作管理员用户。我正在制作,因此我的管理员用户只能看到所有用户的Index.html.erb。那么,我如何仅允许我的管理员用户查看我的链接?
这是我的UsersController中的内容:
before_filter :authenticate, :only => [:destroy,:index,:show,:edit, :update]
before_filter :correct_user, :only => [:edit, :update]
before_filter :admin_user, :only => [:index,:destroy]
.
.
.
.
private
.
.
.
def admin_user
authenticate
redirect_to(root_path) unless current_user.admin?
end
这就是我正在尝试编辑以供管理员查看:
<% if signed_in? %>
<%= link_to "Users", users_path %>
<% end %>
答案 0 :(得分:7)
为此编写一个帮助方法,以便您的视图干净且易读。
your_view.html.erb
<% link_to "Users", users_path if admin? %>
helpers/application_helper.rb
def admin?
@current_user.name == "Mr.Wallinzi"
# I made up the line above. Implement your own checks according to your setup
end
答案 1 :(得分:1)
我使用account_type作为用户的属性。所以我写了类似
的内容def is_admin
return true if self.account_type == 1 #The admin account type
end
因此...
<%if signed_in? && @active_user.is_admin %>
<%= link_to "Users", users_path %></div>
<% end %>
答案 2 :(得分:0)
如果你使用Devise,你可以轻而易举地实现这一点:
1-将admin
属性添加到设计表:
一个。您可以使用迁移添加它:$ rails generate migration add_admin_to_users admin:boolean
。您的迁移现在将如下所示:
class AddAdminToUsers < ActiveRecord::Migration
def change
add_column :users, :admin, :boolean, :default => false
end
end
湾您也可以在迁移t.boolean :admin, null: false, default: false
2-在你看来,你可以这样:
<%= link_to "Users", users_path if current_user.admin? %>
将admin?
添加到Devise表后,它将成为与email
和其他类似的属性。它以问号?
结束,因为它是一个布尔类型。