gpt4 book ai didi

ruby-on-rails - 在哪里放置用户访问控制? Controller 还是型号?

转载 作者:行者123 更新时间:2023-12-04 06:39:08 27 4
gpt4 key购买 nike

我知道我们应该避免在 Controller 中放置逻辑。那么什么是实现用户访问控制之类的正确方法。假设我有 User ,其中每个实例都有一个标志方法 admin?这决定了用户是否可以访问其他用户的信息。

选项 1:将访问控制置于自定义模型中

模型:

class User < ActiveRecord::Base
def self.get_list(accessor)
return [] unless accessor.admin?
self.all
end
end

Controller :
class UsersController < ApplicationController
def index
@users = User.get_list(current_user)
end
end
current_user可能会在应用程序 Controller 中的某处定义。

选项 2:将访问控制放在 Controller 中

模型:
class User < ActiveRecord::Base
end

Controller :
class UsersController < ApplicationController
def index
@users = current_user.admin? User.all : []
end
end

还有一些外围后果,例如测试的去向以及它们是如何实现的。

我的直觉是这两个选项中的第一个更可取,但我过去只使用过选项 2。此外,似乎普遍接受的(据我所知)放置操作范围访问过滤器的做法是在 Controller 级别完成的,如下所示:
class UsersController < ApplicationController
before_filter :verify_logged_in
end

最佳答案

任何控制应用程序路由的逻辑都属于您的 Controller 。至于你的例子,第一个是可取的,但实际上并没有太多。

固执己见的框架很容易让我们几乎痴迷于以一种被认为正确的方式做事。在您的示例中,在我看来,将如此少量的逻辑留在您的 Controller 中完全没问题。如果要抽象它,请给它一个描述性名称,以更好地描述该方法正在做什么,否则只会使代码不必要地难以阅读。

关于ruby-on-rails - 在哪里放置用户访问控制? Controller 还是型号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4485763/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com