我的控制器中有一些方法。 首先我写
before_action :require_user
before_action :require_rights, only: [:show, :my_method]
我可以动态放置方法吗?例如
before_action :require_rights, only: current_user.allowed_actions
我认为在某处保存方法名称并将每个用户配置为具有访问权限的组。或者现有宝石有更好的解决方案吗?
答案 0 :(得分:1)
你可以试试这个:
#controller
before_action :require_rights
def require_rights
unless current_user.allowed_actions
raise 'not authorized'
end
end
让你的方法中的条件可以解决你的问题。
答案 1 :(得分:0)
你可以这样做。
before_action :require_user
before_action :require_rights
def require_rights
fail 'Not allowed' unless current_user.allowed_actions.include?(action_name) # Guard to check if user allowed to do certain action
end
另外,我建议你创建一个特殊的类来为你处理这个逻辑。例如:
class RightsPolicyService
attr_reader :user
def initialize(user)
@user = user
end
def allowed?(controller_name, action_name)
# Define here your custom logic for checking if user is allowed
user.allowed_controllers.include?(controller_name) &&
user.allowed_actions.include?(action_name)
end
end
# And in the controller
def require_rights
fail 'Not allowed' unless RightsPolicyService.new(current_user).allowed?(controller_name, action_name)
end
注意:失败只是一个例子,您应该在这种情况下生成响应或在某处重定向。