我正在制作一个仅有两种用户的简单应用程序:admin和simpleuser。我希望我的gemfile在没有任何助手(例如"设计"(的情况下,尽可能少的宝石。
我试图创建一个用于处理用户配置文件更新的自定义控制器,但据我所知,这不是一种静止的方法,这并不意味着用户参数正在由其他控制器处理。
所以,哪些配置文件应该做什么:
简单用户:
- 获取URL localhost:xxxx/profile 用于编辑配置文件设置
- 无法获得任何其他用于编辑页面的路由,例如"/用户/7/编辑",即使他有ID 7
- 无法通过"/users/:id/edit"编辑任何其他页面
管理员:
- 获取URL localhost:xxxx/profile 用于编辑个人资料设置
- 获取用于通过"/users/:id/edit"编辑任何用户的URL
现在,我已经达到了所有管理员的要求,而对于SimpleUser来说,我只有第一和第三。我该如何拒绝给用户"/user/user_id/edit"路径,但仍然可以给他"/profile",在不处理和重定向URL的情况下可能会有可能吗?
p.s我不是在要求一件代码,我只是想知道可能的选择,raby on Rails
您需要UsersController
上的before_action
检查用户是否是常规用户,如果她将其重定向到/profile
。假设/profile
映射到show
操作:
class UsersController < ApplicationController
before_action :check_user, except: [:show]
private
def check_user
redirect_to @user unless @user.admin?
end
end
一个选项是将ROUTES.RB设置为:
namespace :admin do
resources :users
end
resource :user, only: [:show, :edit, :update]
在控制台中执行rake routes
,以检查Admin,您可以访问所有这些操作(请注意:ID 参数(:
Prefix Verb URI Pattern Controller#Action
admin_users GET /admin/users(.:format) admin/users#index
POST /admin/users(.:format) admin/users#create
new_admin_user GET /admin/users/new(.:format) admin/users#new
edit_admin_user GET /admin/users/:id/edit(.:format) admin/users#edit
admin_user GET /admin/users/:id(.:format) admin/users#show
PATCH /admin/users/:id(.:format) admin/users#update
PUT /admin/users/:id(.:format) admin/users#update
DELETE /admin/users/:id(.:format) admin/users#destroy
虽然用户只能(注意没有:id(:
Prefix Verb URI Pattern Controller#Action
edit_user GET /user/edit(.:format) users#edit
user GET /user(.:format) users#show
PATCH /user(.:format) users#update
PUT /user(.:format) users#update
因此,您对管理员和用户有不同的控制器。