我有基于用户角色的访问控制。用户有很多角色。 每个角色都可以访问一些控制器,操作和范围。Rails4从模型方法访问controller_name
我有方法can_control?(控制器)在用户模型中检查用户是否有权访问特定的控制器。我有类似的行动方法。
然后,在视图或控制器我可以使简单的逻辑使用隐藏某些信息或允许访问:
current_user.can_control?(controller_name)
不知是否有可能创造在用户模型,其自动进行CONTROLLER_NAME方法。我试图在模型中定义方法。
def can_control?
self.permitted_cotrollers.include?(controller_name)
end
但它给我一个错误:
undefined local variable or method `controller_name' for #<User:0x007f00e8ceb928>
我理解错误,但是可以找到解决办法,或者有可能有一个。
我觉得你还是需要通过控制器的名称,因为can_control参数?是一种实例方法,您需要检查用户访问某个控制器的能力。每次您加载不同的视图时,Controller_name似乎也会更改。为了便于实施,您可以尝试使用:https://github.com/CanCanCommunity/cancancan –
恐怕您没错。在这个例子中它很容易,但我需要更复杂的方法,我需要使用这个方法,并在每个方法中传递它并不像我想的那样干。 – rpeczykowski
但我想如果你只是想控制访问你的视图和控制器,你可以尝试'cancancan' gem。我已经尝试了很多次,并且证明是有效的。 –