设计认证

Devise Authentication

我是 rails 的新手,我创建了简单的管理管理面板和简单的设计身份验证,效果很好。

当我创建用户时,我在下拉菜单中定义他们是管理员、用户还是测试人员。 所以我的问题是我想检查用户是否是管理员让他进入,如果用户是其他人则不要让他进入。我想让它尽可能简单所以当有人想要登录时检查字段组是否管理员说,没关系。

我的代码:

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]

设计新的部分:

<%= stylesheet_link_tag "style.css" %>

<%= form_for(资源, 如: resource_name, url: session_path(resource_name)) do |f| %>

  <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" %>

提前致谢。

我用 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