【发布时间】:2011-12-22 08:09:21
【问题描述】:
我有三个模型:用户、组织和项目。
组织拥有_many 用户(具有不同角色)和用户属于_to 组织。
用户拥有_许多项目,项目同时属于用户和组织(通过将@project.organization_id = current_user.organization_id 放入控制器的def create 方法中)。
我将此位放入我的projects_controller.rb 文件中,以确保登录的用户只能查看与其组织关联的项目。
def index
@projects = Project.where(organization_id:current_user.organization_id)
end
然而,这一切只是对 current_user 隐藏其他项目。如果他输入http://localhost:3000/projects/3(属于另一个组织的另一个用户的项目),他仍然可以访问它。
我应该在 projects_controller 的 def show 部分添加什么来阻止这种情况发生?我已经破解了几件事,但我无法在没有任何错误的情况下正确完成。如果可能的话,我也不想使用 CanCan。
我试着放了一个
before_filter :require_project_belong_to_organization, :only => [:show]
def require_project_belong_to_organization
@project = current_user.projects.find(params[:id])
end
但这仅在是创建它的用户时才返回结果。我需要其他用户也能够查看它,只要他们在同一个组织中。
【问题讨论】:
标签: ruby-on-rails authorization