我有控制器用户:
class UsersController < ApplicationController
......
def show
@user = User.find(params[:id])
end
def index
@users = User.paginate(page: params[:page], per_page: 25)
end
......
end
现在的用户配置文件位于 / users / 1 , / users / 2 等,用户列表位于 / users /
我想授予特殊访问权限:
如何限制这种访问方式?
答案 0 :(得分:0)
您应该使用cancancan或pundit或ruby-toolbox.com的ACL库
答案 1 :(得分:0)
假设您定义了current_user
,并且您的User
类具有admin
属性,则可以执行以下操作:
class UsersController < ApplicationController
......
def show
@user = User.find(params[:id])
if current_user.admin || @user == current_user
# render the show screen
else
# redirect to wherever
end
end
def index
if current_user.admin
@users = User.paginate(page: params[:page], per_page: 25)
# render the index screen
else
# redirect to wherever
end
end
......
end
或者您可以只使用大量的授权宝石之一,例如cancancan或pundit。
答案 2 :(得分:0)
我可能会通过使用两个不同的端点(例如/profile
和/admin/users/1
)来处理此问题。然后,您将拥有不同的控制器:
UserProfileController < ApplicationController
def show
@user = current_user
end
end
和:
class Admin::UsersController < AdminController
def show
@user = User.find(params[:id])
render 'user_profile/show' # or another template if you like
end
end
class AdminController < ApplicationController
before_action :ensure_admin
def ensure_admin
if !current_user.admin?
raise ActionController::RoutingError, 'Not Found'
end
end
end
答案 3 :(得分:0)
考虑您的网址send_message()
,您可以获取参数ID并将其与钩子中的当前用户ID进行比较:
user/1/
关于管理员,您可能有一个专用的命名空间,甚至进行了更彻底的检查,可以在其中查看用户个人资料。