如何解决通过Devise进行管理员用户管理
| 我是第一次尝试Devise。我想做的一件事是为Admin用户提供一个创建,查找和编辑用户的界面。这是我可能出错的地方。 我创建了一个从ApplicationController继承的PeopleController类,该类列出了人员并提供了用于创建和更新用户的方法和视图。一切正常,只有一个例外。当管理员用户更新自己的记录时,该会话将被清除,并且保存后必须再次登录。 在此应用程序中,我不使用可注册模块。只有管理员用户可以创建新用户。设计提供用户管理工具的正确方法是什么。创建我自己的控制器似乎是错误的方法。 在此先感谢您的帮助。解决方法
非常感谢你的帮助。本质上,这正是我正在做的事情。我发现了一条线索,可以帮助我解决用户在此Wiki中编辑自己的记录时被清除的会话问题:
https://github.com/plataformatec/devise/wiki/How-To:-Allow-users-to-edit-their-account-without-providing-a-password
这是我需要的行:
sign_in resource_name,resource,:bypass => true
该方法位于Devise :: Controllers :: Helpers中,因此我在控制器中进行了此操作。
class PeopleController < ApplicationController
include Devise::Controllers::Helpers
然后在我的更新方法中,仅当current_user.id等于正在编辑的ID时才调用它:
def update
@person = User.find(params[:id])
if @person.update_attributes(params[:user])
sign_in @person,:bypass => true if current_user.id == @person.id
redirect_to person_path(@person),:notice => \"Successfully updated user.\"
else
render :action => \'edit\'
end
end
现在,如果当前用户编辑自己的记录,则在保存会话后将对其进行还原。
再次感谢您的回复。
, 这就是我在其中一个应用程序中管理用户的方式。我只有一个User
类生成
rails g devise User
我在迁移中添加了一个“ 5”列:
class AddRoleToUser < ActiveRecord::Migration
def change
add_column :users,:role,:string,:default => \"client\"
end
end
和我的User
模型:
class User < ActiveRecord::Base
# Include default devise modules. Others available are:
# :token_authenticatable,:confirmable,:lockable and :timeoutable
devise :database_authenticatable,:recoverable,:rememberable,:trackable,:validatable
# Setup accessible (or protected) attributes for your model
attr_accessible :email,:password,:password_confirmation,:remember_me
def admin?
self.role == \"admin\"
end
end
然后,要创建新用户,您需要做的就是在控制器(甚至是子类ѭ9even)中提供一个自定义方法,如下所示:
# some_controller.rb
def custom_create_user
if current_user.admin?
User.create(:email => params[:email],password => params[:password])
redirect_to(some_path,:notice => \'sucessfully updated user.\')
else
redirect_to(some_other_path,:notice => \'You are not authorized to do this.\')
end
end
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。