Halløj Udviklere,
Jeg er begyndt at programmere på en ny måde (MVC), hvilket ikke ligger helt nemt, men det kommer da. Jeg har udviklet et simpelt brugersystem, men jeg skal selvfølgelig kunne lave restriktioner på hvad man som bruger kan se, og ikke se.
Normalt ville jeg bare have en session som jeg ville kontrollere:
- $_SESSION['logged_in'] = TRUE;
-
- //en random side
- if(!isset($_SESSION['logged_in']) || $_SESSION['logged_in'] != TRUE)
- {
- echo 'You kennot see 'dis page!';
- }
min MVC version er bygget op omkring inkludering af views i et template. Det er bygget op således:
header.php
template.php
footer.php
Den eneste side jeg kalder er altid template.php, så parser jeg data dertil, for at fortælle den hvad content den skal hente:
- <?php
-
- //loading page.
- $this->load->view('includes/header');
- $this->load->view($main_content);
- $this->load->view('includes/footer');
så fx:
- $data['main_content'] = 'front_page';
- $this->load->view('template', $data);
derved vil min template.php hente 'front_page.php' og smide ind.
Hele problemstillingen er jo så at jeg skal holde view sider fri for php kode, men derved kan man vel også komme frem til siden?
ex:
control_panel.php - restricted/kun hvis man er logget ind
Når man logger ind bliver man smidt til denne url:
site/frontpage/cpDette kører denne controller:
frontpage.php
- function cp()
- {
- if($this->is_logged_in())
- {
- $data['main_content'] = 'control_panel';
- $this->load->view('includes/template', $data);
- }
- else
- {
- $data['main_content'] = 'no_acces';
- $this->load->view('includes/template', $data);
- }
- }
altså, hvis man bliver sendt til cp(control_panel.php), så kontrollerer den om man er logget ind, via is_logged_in() funktionen:
- function is_logged_in()
- {
- $is_logged_in = $this->session->userdata('is_logged_in');
- if(!isset($is_logged_in) || $is_logged_in != true)
- {
- return false;
- }
-
- return true;
- }
Den kontroller med den session der er. Altså hvis den her funktion returnerer true, så sender den en videre.
Det virker også helt fint, hvis du ikke er logget ind, så kommer man ikke ind på siden.
Problemet er nu at hvis man kender pathen til den view side som jeg forsøger at forhindre adgang til, så kan man godt se den. Altså hvis man istedet for at gå igennem ens controllers (site/frontpage/cp), så går man direkte til siden: site/skjult_side/control_panel.php
fordi der er jo ikke noget som forhindrer en direkte åbning af filen.
Så basicly; hvad gør man her?
Håber det gav mening :o