目前,我的 Users 数据库有一个名为“admin”的列,其值为 bool 值,默认设置为 false。我有一个管理员用户播种到数据库中。
如何编写我的应用程序以便是管理员的用户可以创建新用户,而不是的用户不能? (此外,用户应该仅由管理员创建)
似乎应该有一种简单的方法可以在不涉及使用某些外部模块的设计中做到这一点。然而,到目前为止,我还没有找到满意的答案。
我更有可能标记仅是设计的解决方案。 (一个简单的标准 MVC/Rails 解决方案加分)但是,如果真的有更好的方法来做到这一点而不涉及 CanCan,我可能也接受它。
注意:
我已经搜索了一段时间,发现了其他几个与这个问题非常相似的 stackoverflow 问题,但要么没有完全回答问题,要么使用了其他非设计模块。 (或两者)
最佳答案
要实现授权,使用 Controller 上的方法
完全按照@diego.greyrobot 的建议
class UsersController < ApplicationController
before_filter :authorize_admin, only: :create
def create
# admins only
end
private
# This should probably be abstracted to ApplicationController
# as shown by diego.greyrobot
def authorize_admin
return unless !current_user.admin?
redirect_to root_path, alert: 'Admins only!'
end
end
要回避 Devise 的“已登录”问题,请定义用于创建用户的新路径。
我们将简单地定义一个新路由来处理用户的创建,然后将表单指向该位置。这样,表单提交就不会通过设计 Controller ,因此您可以随意以正常的 Rails 方式在任何地方使用它。
# routes.rb
Rails.application.routes.draw do
devise_for :users
resources :users, except: :create
# Name it however you want
post 'create_user' => 'users#create', as: :create_user
end
# users/new.html.erb
# notice the url argument
<%= form_for User.new, url: create_user_path do |f| %>
# The form content
<% end %>
关于ruby-on-rails - rails : Only allow admin user to create new users in Rails with Devise (No external modules),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24875403/