gpt4 book ai didi

ruby-on-rails - rails : Only allow admin user to create new users in Rails with Devise (No external modules)

转载 作者:数据小太阳 更新时间:2023-10-29 06:38:43 30 4
gpt4 key购买 nike

目前,我的 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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com