好的,假设有这个db模式(关系):
|User | (1-->n) |Customer | (1-->n) |Car | (1-->n) |Support |
|--------| |---------| |-----| |-----------|
|id | | user_id | |Brand| |Description|
|username| |lastname | |PS | |Cost |
|password| |firstname| |seats| |hours |
|... | |.. | |... | |... |
用户表由Authlogic生成。
我有2个注册用户,每个用户都有他的客户等。使用Authlogic,我只能允许经过身份验证的用户访问控制器/视图。没关系,这就是Authlogic的用途。
现在我需要确保用户#1永远不会到达属于#2用户的信息。
换句话说: 如果用户#1进入http://myapp.com/cars,他将看到属于用户#1的客户的汽车列表
如果id = 131的汽车属于用户#1的客户,则只有用户#1必须能够获得此信息(http://myapp.com/car/1)。如果用户#2在浏览器中插入相同的链接,则他不一定能够看到此信息。
有些人建议我在用户和每个db表之间创建一个关系,以检查记录是否与current_user相关联。
你怎么看?什么是最好的方法/解决方案?答案 0 :(得分:1)
所以你有两件事:
至于索引,我建议像:
def index
# find logic
@cars = Car.find(:all,:conditions=>{:customer_id => current_user.customers.collect(&:id)})
# whatever else
# ...
end
显示页面:
def show
# .....
# after the find logic
redirect_to :index unless current_user.customers.collect(&:id).include? @car.customer_id
# whatever else
# ...
end
这种方法适用于大多数情况,但更好的性能方法是将user_id列添加到costumers表中,这称为非规范化,但它在性能方面是可接受的。