2017-08-16 78 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

相關,加上我想要的是將白名單和黑名單一起使用 –