帮助我解决问题:
我有两个设计模型(用户和管理员)
我有一些模型和控制器的路线:
/posts
/posts/80
/posts/80/edit
我希望如此: admin拥有所有访问权限 用户有权访问:
/post
and
/post/80 ( if he is creator of this post )
我这样做了:
class PostsController < ApplicationController
before_filter :check_guest_logged_in!, :except => [:index, :show]
.
.
.
private
def check_guest_logged_in!
if user_signed_in?
authenticate_user!
elsif admin_signed_in?
authenticate_admin!
else
redirect_to root_path
end
end
但在这种情况下,如果用户授权他可以放入浏览器
/posts/80/edit
他可以访问(即使他不是这篇文章的创建者)
我该如何解决这个问题?
我想要那样的东西 私人
def check_guest_logged_in!
if user_signed_in?
authenticate_user!
if ( current_user.id == @post.user.id )
else
return false;
end
elsif admin_signed_in?
authenticate_admin!
else
redirect_to root_path
end
end
但它不起作用
答案 0 :(得分:3)
我的建议是使用CanCan gem
https://github.com/ryanb/cancan
这是一个很棒的railscast
http://railscasts.com/episodes/192-authorization-with-cancan
使用cancan,你可以做这样的事情
class Ability
include CanCan::Ability
def initialize(user)
user ||= User.new # guest user (not logged in)
if user.admin?
can :manage, :all
else
can :read, :all
end
end
end