2017-09-04 22 views
0

我有安装设计,并建议在http://codepany.com/blog/rails-5-user-accounts-with-3-types-of-roles-devise-rails_admin-cancancan/我已添加超级用户和主管角色。现在我只想让超级用户访问很多视图(对配置数据进行CRUD)。rails设计用户管理,我必须在所有vews个人上执行它

我知道我可以通过在内容周围包裹来做到这一点。

<% if current_user.superadmin_role? %> 
    ...all the content... 
<% else %> 
    This page is not available to you 
<% end %> 

从我收集的内容中我需要为所有视图执行此操作,以限制所有视图。但是想知道是否有更好的方法来做到这一点。即我可以做一些事情,比如把所有的支票放在一个地方,只允许某些网页通过,甚至不允许所有的网页,并且我可以把一些代码放在公共的地方。

回答

0

如果您不希望显示的内容是整个页面,您可以通过在控制器中加入 before_action :authenticate_admin! 做到这一点。

#some_controller.rb 
before_action :authenticate_admin! 

def action 
    ... 
end 

private 
def authenticate_admin 
    unless current_user.superadmin_role? 
    redirect_to "403.html" 
    end 
end 

或者,如果你想这样做非控制水平,

#view 
<div class="hide <%= 'admin' if @is_admin %>"> 
    hogehoge 
</div> 

#controller 
before_action set_is_admin 
def set_is_admin 
    @is_admin = current_user.superadmin_role? ? true : false 
end 

再加入

# application.css 
<style> 
.hide{ 
    display: none; 
} 
.admin{ 
    display: block; 
} 
</style> 
+0

谢谢,工作原理,但我得到,如果一个“损坏的内容错误”用户不在superadmin_role中。我猜它是'redirect_to“403.html”'。我将'403.html'更改为'/',现在它将用户发送回主页。我也必须改变':authenticate_admin!'到':authenticate_admin'来让它工作。 –

相关问题