Я следовал учебнику по http://www.logansbailey.com/ и изменил его, чтобы незарегистрированный человек мог зарегистрироваться с именем пользователя, электронной почтой и паролем.
Я уже включил вошедшего в систему пользователя, чтобы изменить его / ее адрес электронной почты и пароль, но не имя пользователя.
Что я хочу добавить:
1) чтобы вошедший в систему пользователь мог видеть / достигать его / ее имени пользователя и электронной почты,
2) включить пользователя с установленным admin_flag (я обработал это в таблице sql и создал пользователя), чтобы иметь возможность просматривать / изменять все записи пользователя.
Я изменил app / cotrollers / user_controller.rb следующим образом:
class UsersController < ApplicationController
before_filter :is_user, :only => [:index, :show, :edit, :update, :destroy]
def index
@users = User.all
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @users }
end
end
def show
@user = User.find(params[:id])
respond_to do |format|
format.html # show.html.erb
format.xml { render :xml => @user }
end
end
def new
@user = User.new
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @user }
end
end
def edit
end
def create
@user = User.new(params[:user])
respond_to do |format|
if @user.save
flash[:notice] = 'Registration successful.'
format.html { redirect_to(:controller => 'home', :action => 'tutorial') }
format.xml { render :xml => @user, :status => :created, :location => @user }
else
format.html { render :action => "new" }
format.xml { render :xml => @user.errors, :status => :unprocessable_entity }
end
end
end
def update
respond_to do |format|
if @user.update_attributes(params[:user])
flash[:notice] = 'Your profile was successfully updated.'
format.html { redirect_to(:controller => 'home', :action => 'index') }
format.xml { head :ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @user.errors, :status => :unprocessable_entity }
end
end
end
def destroy
@user = User.find(params[:id])
@user.destroy
respond_to do |format|
format.html { redirect_to(users_url) }
format.xml { head :ok }
end
end
def is_user
if User.exists?(params[:id])
@user = User.find(params[:id]);
if current_user.admin_flag == true
flash[:notice] = 'Welcome Admin'
end
if !current_user || current_user.id != @user.id
flash[:notice] = 'You do not have access to that page'
redirect_to(:controller => 'home', :action => 'index')
end
else
flash[:notice] = 'You do not have access to that page'
redirect_to(:controller => 'home', :action => 'index')
end
end
end
Файл app / models / user.rb:
class User < ActiveRecord::Base
acts_as_authentic
end
И я могу подтвердить, что пользователь admin_flag установлен правильно, поскольку файл app / views / layouts / application.html.erb содержит:
<div id="admin">
<% if current_user %>
<% if current_user.admin_flag == true %> |
<%= link_to "Users", users_path %>
<% end %>
<% end %>
</div>
правильно отображает ссылку «Пользователи» при входе в систему с правами администратора.
Теперь проблема в том, что я не могу показать функциональность всем пользователям, редактировать других пользователей и т. Д. Как администратор, я могу показывать и изменять пользователя-администратора точно так же, как и все остальные обычные пользователи, то есть я тоже не могу изменять имя пользователя.
Что здесь может быть не так?