Ruby on Rails使用白名单和黑名单来允许当前用户查看页面
问题描述:
基本上我想查看用户是否添加了任何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签我得到的(顺便说一句我用色器件) 有没有更好的方法来实现这一点,而不是更复杂它
答
如果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
一遍,假设您在“用户有一个名为“黑名单”的属性'模型。
要求blacklist_users和whitelist_users与用户模型相关,但它们只与b_page模型 –
相关,加上我想要的是将白名单和黑名单一起使用 –