Ruby on rails 设计问题(RubyonRails)
在我的系统中有许多类型的用户(4),根据登录的用户,他们只能访问某些信息 例如,我尝试在我的客户机模型中执行以下操作:Ruby on rails 设计问题(RubyonRails),ruby-on-rails,Ruby On Rails,在我的系统中有许多类型的用户(4),根据登录的用户,他们只能访问某些信息 例如,我尝试在我的客户机模型中执行以下操作: class Client def self.allowed if current_user.is_a?(SuperAdmin) return self.all elsif current_user.is_a?(Client) return [current_user] elsif
class Client
def self.allowed
if current_user.is_a?(SuperAdmin)
return self.all
elsif current_user.is_a?(Client)
return [current_user]
elsif current_user.is_a?(ClientAdmin)
return [current_user.client]
end
end
end
问题是,我的模型似乎无法访问当前的用户助手方法。(未定义的局部变量或#的“当前用户”方法) 我有两个问题:
我不知道不知道你是如何访问这个方法的,但是你可以在下面的代码>应用程序控制器< /代码>中考虑如下:< /P>
before_filter :set_current_user
def set_current_user
Client.current_user = current_user
end
这将在客户机
模型中提供当前用户的副本
二,。是否应该在模型中执行诸如返回允许的客户机之类的逻辑
我使用的大多数身份验证系统都将当前用户
(或等效功能)放在应用程序控制器
中,并提供了防止未经授权用户访问特定控制器操作的方法。毕竟,应该由控制器决定哪些用户可以访问他们的操作,而不是模型
一般来说,如果您试图从模型中访问控制器的成员/方法,那么您的做法是错误的-信息不应该通过MVC应用程序流动。使用您的方法,我将定义允许传入用户进行检查的方法,如下所示:
class Client
def self.allowed(user)
if user.is_a?(SuperAdmin)
return self.all
elsif user.is_a?(Client)
return [user]
elsif user.is_a?(ClientAdmin)
return [user.client]
end
end
end
然后,您的控制器可以根据正在执行的操作决定应该检查哪个用户(虽然这通常是当前用户
,但这将使您的实现能够与任何用户一起工作,因此,如果您决定添加功能,这取决于以后的事实,您将被介绍)
这就是说,您应该在授权库中进行访问;我个人真的很喜欢。它允许您在一个地方定义授权,使用类似于您在这里展示的样式。作者Ryan Bates有一个错误。你能粘贴错误吗?您不应该使用“return”,只需要传递rails能够理解的应该返回的内容。只是一个提示。未定义的局部变量或方法“current_user”#