2017-08-16 6 views
0

fondamentalement je veux voir si l'utilisateur a ajouté blacklist_users ou whitelist_users et ensuite les autoriser ou les interdire selon cela, mais j'ai du mal à trouver le code correctement : (us_id est essentiellement user_id)Ruby on Rails en utilisant liste blanche et listes noires pour permettre à l'utilisateur actuel de voir page

relation: modèle Blacklist_user:

belongs_to :b_page 

modèle Whitelist_user:

belongs_to :b_page 

modèle B_page:

has_many :whitelist_user 
    has_many :blacklist_user 
contrôleur

:

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 

vues:

<% 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 %> 

mais quand je signe en tant que @ b_page.user je reçois le (BTW j'utilise concevoir) existe-t-il une meilleure façon de mettre en œuvre ceci, au lieu de le compliquer encore plus?

Répondre

0

Si Ce sont des modèles séparés, alors vous pouvez le faire dans l'action de votre contrôleur. Devise est livré avec une méthode, user_signed_in?, Qui vous indiquera si un utilisateur est connecté ou non. Dans votre cas:

blacklist_user_signed_in? 
whitelist_user_signed_in? 

Ensuite, dans votre action de contrôleur pour montrer la page:

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

Cela suppose que vos modèles sont appelés blacklist_user et whitelist_user. S'ils ont simplement attributs et sont le même modèle, vous pouvez faire:

current_user.blacklisted? 

et dans votre modèle utilisateur

def blacklisted? 
    blacklist 
end 

Encore une fois que suppose que vous avez un attribut appelé « liste noire » dans votre « utilisateur ' modèle.

+0

qui nécessite que les utilisateurs blacklist_users et whitelist_users soient liés au modèle des utilisateurs, mais ils sont uniquement liés au modèle b_page –

+0

plus ce que je veux, c'est utiliser la liste blanche et la liste noire ensemble –