公司中的用户只能在Rails中查看公司内的项目..?

时间:2011-12-22 08:09:21

标签: ruby-on-rails authorization

我有三个模型:用户,组织和项目。

组织has_many用户(具有不同的角色)和用户属于组织。

用户has_many项目,项目属于用户和组织(通过将@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

但是如果是创建它的用户,则只返回结果。我需要其他用户也可以查看它,只要他们在同一个组织中。

3 个答案:

答案 0 :(得分:1)

尝试cancan

答案 1 :(得分:0)

在您的控制器中使用before_filter并检查项目的用户是否与current_user相同

答案 2 :(得分:0)

我将首先在项目模型中创建一个函数 authorized?。确保 current_user 可用于模型。

authorized?
  self.organization_id == current_user.organization_id
end

然后在控制器中:

def show
  @project = Project.find(params[:id])
  if @project
    unless @project.authorized?
      flash[:danger] = 'not authorized'
      redirect_to.... 
    end
  else
    flash.now[:danger] = 'Project was not found'
  end
end