team-1/development #35
No reviewers
Labels
No labels
No milestone
No assignees
3 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
HNNW/core!35
Loading…
Reference in a new issue
No description provided.
Delete branch "team-1/development"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Goed werk aan de RBAC-basis. De
Permission-enum metmaskFor()/in()is overzichtelijk, de voters controleren echt per object (eigenaar of actieve participant met rol), en het is fijn dat er unit-tests bij de voters zitten. Ook goed datdd()en de/dev/set-user-route weg zijn, en dat het loginformulier nu een echte CSRF-token meestuurt.Dit moet nog aangepast worden:
Moet opgelost worden
config/packages/security.yaml: de firewall gebruiktprovider: account_provider, maar die provider staat niet onderproviders:. Daar staan alleenusers_in_memoryenapp_user_provider. In commit06d9a6cstond hij er nog, maar bij "Resolve merge conflicts" (4e5a868) is hij weggevallen. Daardoor compileert de container niet en draait de hele applicatie niet. Zet hem terug (account_provider: { id: App\Security\AccountUserProvider }) en haal de ongebruikte providers weg.account_idniet meer in de sessie gezet, maarAccountsController(Account Centre) leest dat op 8 plekken nog met$session->get('account_id'). Een ingelogde gebruiker krijgt in het Account Centre dus steeds "Je moet ingelogd zijn" en wordt naar de login gestuurd. Zet die plekken om naar$this->getUser()(dat is het hele doel van deze PR). Of zetaccount_idtijdelijk ook inAccountAuthenticator::onAuthenticationSuccess()en spreek af wie het later opruimt.AccountAuthenticatorimplementeert geenAuthenticationEntryPointInterfaceen er is geenform_login. Een niet-ingelogde bezoeker op/org,/adminof een projectpagina krijgt daardoor een 401 in plaats van een redirect naar de login. Er is ook geenerrors/401.html.twigoferrors/500.html.twig, dus hij ziet alleen de platte tekst "Er is iets misgegaan.". Voegstart()toe aanAccountAuthenticator, met een redirect naarauth.login.ProjectsController::detail()vereist nuProjectVoter::VIEW, net alschat,participants,reviews,tasks,updatesenworkPackages. VIEW krijgen alleen de eigenaar en actieve participants met een rol die VIEW heeft. Een bezoeker die zich wil aanmelden kan de projectpagina dus niet meer zien. Inschrijven op een taak (enroll) vereist bovendienPackageTaskVoter::EDIT, dus een participant met alleen VIEW kan zich niet inschrijven. Is dat bewust? Zo niet: houddetail(en eventueelapply) openbaar voor zichtbare projecten en gebruik VIEW voor het inschrijven.developinsrc/Entity/Project/WorkPackage.php.developheeft dezelfde bug (packageTasksvsworkPackageTasks) al opgelost in040225e. Mergedevelopin je branch en houd één$workPackageTasks-property over..env.local.exampleis verwijderd, terwijl deREADME.mder nog naar verwijst (cp .env.local.example .env.local). Nieuwe ontwikkelaars kunnen hun omgeving dan niet meer opzetten. Zet deze file terug.config/packages/framework.yaml:error_controllerwordt voor de hele app vervangen doorErrorController::show. Daardoor ziet geen enkel team in dev nog de Symfony-debugpagina met de stacktrace. Verder iserrors/404.html.twigleeg (een lege 404-pagina) en bestaaterrors/500.html.twigniet. Gebruik de standaardmanier:templates/bundles/TwigBundle/Exception/error403.html.twig(enerror404/error.html.twig). Haal danerror_controllerenErrorControllerweg.Verbeterpunten
8.
AuthController::register(): bij een fout geef jeerrors.generalmee, maarregister.html.twigtoont die nergens. De gebruiker ziet dus geen melding. GebruikaddFlash('error', ...)of toonerrors.generalin de template. De inspringing in datcatch-blok klopt ook niet.9.
WorkPackageVoterenPackageTaskVoterkopiëren de logica vanProjectVotermet losse getallen (& 1,& 2,& 4). Gebruik$role->hasPermission(ProjectRole::PERMISSION_VIEW)enz., of laat ze viaAccessDecisionManagerInterfacedoorvragen aanProjectVotervoor het bijbehorende project. Dan staat de regel op één plek. Je hebt nu ook twee permission-systemen naast elkaar (dePermission-enum enProjectRole::PERMISSION_*). Overweeg de projectrechten ook in de enum te zetten.10.
PanelController::modifyProject()controleert naastProjectVoter::EDITookORG_MANAGE_PROJECTS, maar de sub-pagina's (matching,participants,tasks, …) doen dat niet. Wie de hoofdpagina niet mag openen, kan de sub-pagina's dus wel openen. Kies één regel en pas die overal toe, bijvoorbeeld ingetProjectAndCheckEditAccess().11. Kleine opruimpunten: de inspringing in
ProfileController(getAccount()/index()) is kapot,updateLocation()heeft een ongebruikte$em, engetProjectAndCheckViewAccess()geeftobjectterug in plaats vanProject. In veel bestanden ontbreekt nu de newline aan het eind. Zet ook een beschrijving in de PR, met de vermelding dat jebin/console app:rbac:seed-rolesmoet draaien.Let op: PR #15 (team 6) wijzigt
security.yaml,AuthController::login()enlogin.html.twigook, maar metform_login, een chain-provider en logout viaaccount.signoff. Dat zijn twee verschillende login-implementaties: stem af welke het wordt voordat een van beide gemerged wordt. PR #28 (team 5) hernoemtProjectParticipantRepository::findActiveParticipant()naarfindActiveParticipantsByProjectAndProfile(). Daarop leunen jullie voters, dus als #28 eerst gemerged wordt, breken ze. PR #12 (team 3) wijzigt ook deenroll-actie inProjectsController.Tijdens mijn testen heb ik geen fouten gevonden, maar ik heb nog de volgende opmerkingen over de code.
#[Route('/projects/modify/{id}/matching', name: 'modifyProject.matching', methods: ['GET'])]'// onbevoegde gebruikers krijgen een 404#[IsGranted(ProjectVoter::VIEW,'project','Project niet gevonden','404')]// Als een gebruiker wel toegang heeft maar niet mag aanpassen krijgen ze een 403#[IsGranted(ProjectVoter::EDIT,'project')]public function modifyProjectMatching(// symfony bind autmatisch het id aan project en haalt het op// als je en slug gebruikt inplaats van id kan je in de route {slug:project} gebruiken om de slug te bindenProject $project,): Response { ''return $this->render('pages/org/projects/modify-matching.html.twig', ['id' => $project->getId(),'project' => $project,]);}View command line instructions
Manual merge helper
Use this merge commit message when completing the merge manually.
Checkout
From your project repository, check out a new branch and test the changes.