ruby on rails -只有管理员才能创建新用户



我已经在我的rails 3项目上安装和配置了设计,我想让它这样只有管理员可以创建/编辑用户。我如何编辑设计控制器来实现这一点?

我建议使用CanCan。

首先,您将定义能力,如:read, :create, :update:destroy,并通过使用以下内容将它们分配给用户角色:

if user.admin?
  can :manage, :all
end

然后,您将通过使用if can? :create, User检查用户是否具有创建/编辑用户的权限来检查这些能力。

我之前已经整理过了。我记得这很痛苦,但确实有效。需要CanCan.

假设管理员在User模型上使用admin布尔值定义:

user.rb:

class User < ActiveRecord::Base
  devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable
  attr_accessor :current_password
  attr_accessible :name, :password, :password_confirmation, :current_password, :email, :remember_me, :admin
end
class Ability
    include CanCan::Ability
    def initialize(user)
    can :manage, :all if user.admin
  end
end

users_controller.rb

def update
  @user = User.find(params[:id])
  params[:user].delete(:password) if params[:user][:password].blank?
  params[:user].delete(:password_confirmation) if params[:user][:password].blank? and params[:user][:password_confirmation].blank?
  if @user.update_attributes(params[:user])
    flash[:notice] = "Successfully updated "+@user.name
    redirect_to users_path
  else
    render :action => 'edit'
  end
end

routes.rb

devise_for :users, :path => "d"
devise_scope :user do
  get '/sign_in' => 'devise/sessions#new'
  get '/sign_out' => 'devise/sessions#destroy'
end
resources :users, :controller => "users"

application_controller.rb

class ApplicationController < ActionController::Base
  protect_from_forgery
  after_filter :user_activity
  rescue_from CanCan::AccessDenied do |exception|
    redirect_to root_path
  end
  def admin?
    self.admin == true
  end
  def authenticate_admin
    redirect_to :new_user_session_path unless current_user && current_user.admin?
  end
  private
  def user_activity
    current_user.try :touch
  end
end
引入application_helper . rb之后

def resource_name
  :user
end
def resource
  @resource ||= User.new
end
def devise_mapping
  @devise_mapping ||= Devise.mappings[:user]
end

应该可以了

如果您只需要允许管理员创建用户,您可以这样写

class uUsersController < ApplicationController
  def create
     #validate if the current user is an admin 
  end
end 

但是更标准,更灵活的方法是使用像cancan这样的gem,我个人更喜欢:)

相关内容

  • 没有找到相关文章

最新更新