2014-07-22 3 views
2

Ruby를 처음 사용하고 있으며 지금까지 사용자 로그인, 가입, 로그 아웃을 만들었지 만 관리자를 만들고 싶습니다. 어떻게하는지.Ruby on Rails를 사용하여 관리자를 만드는 방법

Rails.application.routes.draw do 

    get 'courses/index' 

    get 'courses/new' 

    get 'courses/edit' 

    get 'courses/show' 

    get 'course/index' 

    get 'course/new' 

    get 'course/edit' 

    get 'course/show' 

    get 'sessions/signin' 

    get 'sessions/main' 

    get 'sessions/profile' 

    get 'sessions/setting' 

    get 'users/new' 

    get 'home/index' 

    resources :users, path_names: {new: "signup"} do 
    collection do 
     get "main", action: :new 
    end 
    end 

    resources :sessions, path_names: {new: "signin", destroy: "signout"} do 
    collection do 
     get :signin 
     get :main 
     get :profile 
     get :setting 
    end 
    end 

    resources :home, only: [], path: "" do 
    get :about 
    end 

    root 'home#index' 

    resources :courses, only: [:index, :new, :edit, :show] 
    #resources :course, only: [:index, :new, :edit, :show] 

    resources :courses 

    resources :course_groups 
    patch 'course_groups/:id/add_course', to: 'course_groups#add_course', as: 'course_group_add_course' 
    delete 'course_groups/:id/delete_course', to: 'course_groups#destory_course', as: 'course_group_destory_course' 


    resources :rules 
    patch 'rules/:id/add_group', to: 'rules#add_group', as: 'rule_add_course_group' 
    delete 'rules/:id/delete_group', to: 'rules#destroy_group', as: 'rule_destroy_course_group' 

    resources :requirements 
    patch 'requirements/:id/add_rule', to: 'requirements#add_rule', as: 'requirement_add_rules' 
    delete 'requirements/:id/delete_rule', to: 'requirements#destroy_rule', as: 'requirement_destroy_rules' 


    #resources :plans  
    resources :users do 
     resources :plans 
    end 
    patch 'users/:user_id/plans/:id/add_course', to: 'plans#add_course', as: 'plan_add_course' 
    delete 'users/:user_id/plans/:id/delete_course', to: 'plans#destory_course', as: 'plan_destory_course' 


    match '/about', to: 'home#about', via: 'get' 
    match '/signup', to: 'users#new', via: 'get' 
    match ':controller(/:action(/:id))(.:format)', via: 'get' 
    match '/signin', to: 'sessions#new', via: 'get' 
    match '/signout', to: 'sessions#destroy', via: 'delete' 
    match '/main', to: 'users#new', via: 'get' 
    #match '/profile', to: 'sessions#profile', via: 'get' 
    match '/setting', to: 'sessions#setting', via: 'get' 


    match '/editname', to: 'users#edit', via: 'get' 

    match '/show', to: 'users#show', via: 'get' 
    match '/profile', to: 'users#profile', via: 'get' 
    #match '/info', to: 'users#info', via: 'get' 
    #match '/changepass', to: 'users#edit', via: 'get' 
end 

users_controller.rb은 다음과 같습니다 :

route.rb이다

class UsersController < ApplicationController 

    before_filter :check_if_signned_in, only: [:show, :edit, :update, :delete] 

    before_filter :signed_in_user, only: [:edit, :update] 

    before_filter :skip_password_attribute, only: :update 

    def new 
    @user = User.new 
    end 

    def create 
    @user = User.new(user_params) 
    if @user.save 
     redirect_to @user, notice: 'User was sucessfully created!' 
    else 
     render action: "new" 
    end 
    end 


    #if current user exits, then it can get back to the main page of user 
    def show 
    if current_user.nil? 
     @user = User.find(params[:id]) 
    else 
     @user = User.find(current_user) 
    end 

    end 


def edit 
    #@user = User.find(params[:id]) 
    #@user = User.find(current_user) 
    @user = current_user 
    @user.save 
    @title = "Edit profile" 
end 


def update 
    @user = User.find(params[:id]) 
    #@user = User.find(current_user) 
    #if @user.update_attributes(user_params) 
    if @user.update_attributes(user_params) 
    flash[:success] = "Profile updated." 
    #sign_in @user_params 
    redirect_to @user 
    else 
    @title = "Edit profile" 
    render 'edit' 
    end 
end 


    private 
    def user_params 
     params.require(:user).permit(:name, :email, :password, :password_confirmation) 
    end 

    def signed_in_user 
     redirect_to signin_path, notice: "Please sign in." unless signed_in? 
    end 

    def edit_user 
     params.require(:user).permit(:name) 
    end 

    def skip_password_attribute 
     if params[:password].blank? && params[:password_confirmation].blank? 
     params.except!(:password, :password_confirmation) 
     end 
    end 

end 

application_controller.rb은 다음과 같습니다

class ApplicationController < ActionController::Base 
    # Prevent CSRF attacks by raising an exception. 
    # For APIs, you may want to use :null_session instead. 
    #protect_from_forgery with: :exception 
    protect_from_forgery 

    #before_filter :session_expire 
    #before_filter :update_active_time 

    include SessionsHelper 

    def check_if_signned_in 
    deny_access unless signed_in? 
    end 


#def update_active_time 
# session[:expires_at] = default_expire 
#end 

def is_owner 
    current_user.id == params[:id] 
end 

#private 
# def get_session_time_left 
#  expire_time = session[:expires_at] #|| default_expire 
#  a = expire_time 
#  b = Time.now 
#  @session_time_left = (a - b).do_i 
     #@session_time_left = (expire_time - Time.now).do_i 
# end 


end 

사람은 어떻게 관리 사용자를하십시오 만드는 방법을 가르쳐 수 있습니까? 관리자가 로그인하면 다른 다른 페이지로 이동합니다. 미리 감사드립니다.

답변

1

무례하지 않고 코드를 정리해야합니다.

귀하의 경로 만 혼란입니다. 나는 다른 사람들을 돕기 위해 몇 가지 코드를 제공했음을 기억합니다. 그러나, 아직 거기에서 다른 경로 떠 났어요 - 가능성 선 아래로 큰 문제를 일으킬


경로 첫째

것입니다, 당신은 순서대로 경로를 얻을 필요가 :

#config/routes.rb 
resources :courses 
resources :users, path_names: {new: "signup"} do 
    collection do 
     get "main", action: :new 
    end 
end 

resources :sessions, path_names: {new: "signin", destroy: "signout", index: "main", edit: "profile", update: "setting"} 

resources :home, only: [], path: "" do 
    get :about 
end 

root 'home#index' 

resources :courses, only: [:index, :new, :edit, :show] 
resources :course_groups do 
    patch :add_course 
    delete :delete_course 
end 


resources :rules do 
    patch :add_group 
    delete :delete_group 
end 

resources :requirements do 
    patch :add_rule 
    delete :delete_rule 
end 

resources :users do 
    resources :plans do 
     patch :add_course 
     delete :delete_course 
    end 
end 


match '/about', to: 'home#about', via: 'get' 
match '/signup', to: 'users#new', via: 'get' 
match ':controller(/:action(/:id))(.:format)', via: 'get' 
match '/signin', to: 'sessions#new', via: 'get' 
match '/signout', to: 'sessions#destroy', via: 'delete' 
match '/main', to: 'users#new', via: 'get' 
match '/setting', to: 'sessions#setting', via: 'get' 
match '/editname', to: 'users#edit', via: 'get' 

간단히 말해서, 모든 것이 Rails is resource/object - orientated입니다.이 경로를 포함되어 있으며, 따라서

(당신이 등 resources 같은 경로 정의 할 수 있습니다 그 이유는) 당신이 가지고있는 모든 route 주변 자원을 구성되어 있는지 확인해야합니다 -

관리

    :

    는 사용할 수있는 몇 가지 옵션이 있습니다, admin 사용자를 만들려면

  1. User 모델에 admin 속성을 만들기 별도의 admin 모델이

내가 강력하게 User 모델에 admin 속성을 포함하는 것이 좋습니다 것 - 만들 그것과 같은 boolean 열 :

#new migration 
add_column :users, :admin, :boolean 

이렇게하면 다음 번호로 전화 할 수 있습니다.

@user = User.find params[:id] 
@user.admin? #-> true/false 

이 응용 프로그램의 & 뷰,

을 사용자가 admin 권한을 가지고 있는지 확인 여부를 위해 당신이 컨트롤러 모두에서 여러 조건문을 사용하실 수 있습니다
관련 문제