0

我正在制作一个我只想使用 google 登录的应用程序(因为我正在使用其他 google api 并且我想同步帐户。)我也希望管理员也能够让其他用户成为管理员。

我想做一些用户管理员,但如果他们用谷歌登录,我怎样才能在控制器中出现这个异常?最好将特定用户保存在数据库中吗?我很困惑!请帮忙。

现在这就是我的管理员

用于检查谷歌登录的omniauth

class OmniauthCallbacksController < ApplicationController
    def google_oauth2
        if auth_details.info['email'].split("@")[1] == "company_name.net"
            user = User.from_omniauth(request.env["omniauth.auth"])
            if user.persisted?
                flash.notice = "Signed in Through Google!"
                sign_in_and_redirect user
            else
                session["devise.user_attributes"] = user.attributes
                flash.notice = "Please provide a password"
                redirect_to new_user_registration_url
            end
        else
            render :text => "Sorry this site is for company_name employees only"
        end
    end
end

管理员迁移到用户

class AddAdminToUser < ActiveRecord::Migration
  def change
    add_column :users, :admin, :boolean, :default => true
  end
end

用户角色表

class CreateRoles < ActiveRecord::Migration
  def change
    create_table :roles do |t|
      t.string :name

      t.timestamps
    end
  end
end

HaveAndBelongToMany 迁移

class UsersHaveAndBelongToManyRoles < ActiveRecord::Migration
  def self.up
    create_table :roles_users, :id => false do |t|
        t.references :role, :user
    end
  end

  def self.down
    drop_table :roles_users
  end
end
4

1 回答 1

0

首先,我认为您可能想让新用户默认为不是管理员,并且仅当当前管理员稍后将其设为管理员时才将该管理员布尔值设置为 true。

要对人员进行身份验证,我建议将omniauth gem 与 Google 策略之一结合使用。这将有助于根据用户的 Google 帐户验证他们的凭据。然后,您可以在您自己的数据库中存储有关该用户的任何与您的应用相关的信息,包括他们是否是管理员,并使用该信息在您的应用中进行授权。希望有帮助。

于 2013-09-23T14:26:48.230 回答