2017-08-16 74 views
0

基本上我想查看用户是否添加了任何blacklist_users或whitelist_users,然后根据该用户添加或禁用它们,但我无法正确计算代码:(us_id基本上USER_ID)Ruby on Rails使用白名单和黑名单来允许当前用户查看页面

关系: Blacklist_user模型:

belongs_to :b_page 

Whitelist_user模型:

belongs_to :b_page 

B_page型号:

has_many :whitelist_user 
    has_many :blacklist_user 

控制器:

if !(@b_page.whitelist_user.empty?) 
    @whitelist_users = @b_page.whitelist_user.map(&:us_id) 
    @whitelist_users.push(@b_page.user.id) 
else 
    @whitelist_users = [] 
end  
if !(@b_page.blacklist_user.empty?) 
    @blacklist_users = @b_page.blacklist_user.map(&:us_id) 
    else 
    @b_page.blacklist_user = [] 
    @blacklist_users = @b_page.blacklist_user.map(&:us_id) 
end 

观点:

<% if ((!(@whitelist_users.empty?)) && @whitelist_users.include?(current_user.id)) || ((!(@blacklist_users.empty?)) && @blacklist_users.exclude?(current_user.id)) %> 
<!-- show bpage --> 


<% elsif ! ((!((@whitelist_users.empty?)) && @whitelist_users.include?(current_user.id)) || ((!(@blacklist_users.empty?)) && @blacklist_users.exclude?(current_user.id)))%> 
<!-- user not allowed--> 
<% else %> 
<!-- show bpage--> 
<% end %> 

,但是当我在为@ b_page.user签我得到的(顺便说一句我用色器件) 有没有更好的方法来实现这一点,而不是更复杂它

回答

0

如果th你可以在你的控制器动作中做到这一点。 Devise带有一个方法user_signed_in?,它会告诉你用户是否登录。你的情况:

blacklist_user_signed_in? 
whitelist_user_signed_in? 

然后在显示的页面上你的控制器动作:

if blacklist_user_signed_in? 
    return redirect_to root_path, 
     notice: 'You are not alllowed to access this part of the site' 
end 

这是假设你的模型称为blacklist_user和whitelist_user。如果他们根本属性和同一型号,你可以这样做:

current_user.blacklisted? 

,并在您的用户模型

def blacklisted? 
    blacklist 
end 

一遍,假设您在“用户有一个名为“黑名单”的属性'模型。

+0

要求blacklist_users和whitelist_users与用户模型相关,但它们只与b_page模型 –

+0

相关,加上我想要的是将白名单和黑名单一起使用 –