我的设计已在我的rails 3项目上安装和配置,并且我想让它只有管理员才能创建/编辑用户。我如何编辑设计控制器来完成此任务?只有管理员才能创建一个新用户
0
A
回答
0
我已经对此进行了排序。我记得这是一个痛苦,但它确实有效。它需要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 "[email protected]
redirect_to users_path
else
render :action => 'edit'
end
end
路线.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
应该这样做。
0
如果您只需要允许管理员创建用户,你可以编写类似
class uUsersController < ApplicationController
def create
#validate if the current user is an admin
end
end
但更标准的,灵活的方式是使用宝石一样cancan,其中我个人更喜欢:)
1
我建议使用CanCan。
首先,你define abilities喜欢:read
,:create
,:update
和:destroy
和使用类似它们分配给用户角色:
if user.admin?
can :manage, :all
end
然后,你会check those abilities通过检查用户是否有权限通过使用类似if can? :create, User
的创建/编辑用户。
相关问题
- 1. 流星:用户帐户管理和创建由管理员只
- 2. 如何拥有一个rails管理员,只有一个管理员可以编辑和创建新帖子
- 3. 如何限制活动管理员只有管理员用户?
- 4. 是否有可能创建管理员用户的副本
- 5. 创建用户和管理员登录
- 6. Magento管理员用户自动创建?
- 7. 为管理员用户创建迁移
- 8. 创建一个按钮,使用户成为管理员
- 9. 如何创建第一个(管理员)用户(CanCan和Devise)?
- 10. rails,只有管理员才能看到json页面
- 11. 只能由Pybossa的管理员启用项目创建
- 12. 我该怎么做才能让只有管理员的用户才能发表文章?
- 13. Drupal如何让某些管理员只能看到他们创建的用户
- 14. 让只有管理员用户输入playframework管理CRUD区域
- 15. Spree管理员只有帐户
- 16. 如何仅允许管理员创建新用户?
- 17. 管理员创建新用户时出错
- 18. 管理员创建/邀请新用户设计
- 19. 通过管理员创建新用户时发生NoReverseMatch错误
- 20. 如何创建一个只能管理Joomla注册用户的组
- 21. WordPress的 - 允许用户编辑管理员创建的页面只有
- 22. 重新创建Gitolite管理员回购
- 23. 创建新的管理员,wordpress
- 24. 管理员页面创建新帖子
- 25. 创建一个新的线程来电子邮件管理员
- 26. 允许管理员创建一个新列?
- 27. Restrinct访问只为管理员用户
- 28. 只允许管理员用户访问一个resque web界面
- 29. 创建WordPress管理员只需安全地创建帖子
- 30. 客户端只能连接到动物园管理员一次
您可能想签出https://github.com/stffn/declarative_authorization - 上面还有一个旧的railscast - http://railscasts.com/episodes/188-declarative-authorization – house9