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

あなたはコントローラーアクションでこれを行うことができます。 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

にのみ関連しています。ホワイトリストとブラックリストを一緒に使用することもできます –

関連する問題