0


1

Benutzer in einem Unternehmen können nur Projekte in ihrem Unternehmen in Rails anzeigen.

Ich habe drei Modelle: Benutzer, Organisation und Projekte.

Organisation hat viele Benutzer (mit unterschiedlichen Rollen) und Benutzer gehören zur Organisation.

Benutzer hat_ viele Projekte, und Projekte gehören sowohl Benutzern als auch Organisationen (indem Sie @project.organization_id = current_user.organization_id in die def create -Methode des Controllers einfügen).

Ich habe dieses Bit in meine Datei "projects_controller.rb" eingefügt, um sicherzustellen, dass angemeldete Benutzer nur die Projekte anzeigen können, die ihrer Organisation zugeordnet sind.

def index
    @projects = Project.where(organization_id:current_user.organization_id)
end

Dies verbirgt jedoch nur die anderen Projekte vor dem aktuellen Benutzer. Wenn er http: // localhost: 3000 / projects / 3 (ein Projekt, das einem anderen Benutzer einer anderen Organisation gehört) eingibt, kann er weiterhin darauf zugreifen.

Was sollte ich in den Teil "def show" von projects_controller einfügen, um dies zu verhindern? Ich habe ein paar Dinge gehackt, aber ich kann es nicht ohne Fehler richtig machen. Außerdem möchte ich CanCan nach Möglichkeit nicht verwenden.

Ich habe versucht, eine

before_filter :require_project_belong_to_organization, :only => [:show]

def require_project_belong_to_organization
   @project = current_user.projects.find(params[:id])
end

Dies gibt jedoch nur dann ein Ergebnis zurück, wenn es der Benutzer war, der es erstellt hat. Ich brauche andere Benutzer, um es auch anzeigen zu können, solange sie sich in derselben Organisation befinden.

2 Answer


1


Versuchen Sie es mit cancan.


0


Verwenden Sie einen before_filter in Ihrem Controller und prüfen Sie, ob der Benutzer des Projekts mit dem current_user identisch ist