我是rails的新手,我创建了简单的Administrate管理面板,简单的设计身份验证,效果很好。
当我创建用户时,我在dropDown菜单中定义了Admins,Users或Testers。 所以我的问题是我想检查用户是否是Admin让他进来,如果用户是其他任何人不让他进去。我想让它尽可能简单,所以当有人想登录检查字段组时,如果它管理员说,没关系。
我的代码:
AdminUser模型
class Adminuser < ActiveRecord::Base
# Include default devise modules. Others available are:
# :confirmable, :lockable, :timeoutable and :omniauthable
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
#before_filter :grupa.eql? "admin"
end
设计配置:
config.authentication_keys = [:grupa]
设计新的sesion:
<%= stylesheet_link_tag "style.css" %>
&lt;%= form_for(resource,as:resource_name,url:session_path(resource_name))do | f | %GT;
<div class= "ex" id="rcorners1">
<h2>Log in for Admin</h2>
<div>
<%= f.label :email %><br />
<%= f.email_field :email, autofocus: true %>
<% :grupa.eql? "Admin" %>
</div>
<div>
<%= f.label :password %><br />
<%= f.password_field :password, autocomplete: "off" %>
</div>
<% if devise_mapping.rememberable? -%>
<div>
<%= f.check_box :remember_me %>
<%= f.label :remember_me %>
</div>
<% end -%>
<div class: 'button'>
<%= f.submit "Log in" %>
</div>
</div>
</div>
<% end %>
</body>
<%#= render "devise/shared/links" %>
提前致谢。
答案 0 :(得分:0)
我用一个access_denied
方法解决了类似的情况,在application_controller.rb中定义了
def access_denied
respond_to do |format|
format.html { render :text => "Unauthorized", :status => 401, :message => "Unauthorized" }
format.json { render json: {:error => {:code => 401, :message => "Unauthorized"}}, status: :unauthorized }
end
为您的用户定义.admin?
方法,可能只是检查组成员身份或您想要做的任何事情,然后在您想要保护的控制器中执行类似的操作,
def index
return access_denied unless current_user.admin?
end
或者,您可以创建一个执行检查的辅助方法,如果要将相同的逻辑应用于整个控制器,则可以将其用作before_filter。 像,
before_filter :only_allow_admin_users