DOUG LLOYD: Ibland när vi programmering Vi gör saker så ofta, så ofta, och så många människor göra samma idea-- eller samma sak, att det har ett namn. MVC är precis ett sådant. Det kallas en programmeringsparadigm. Det är ungefär som en bästa praxis som har destillerats ned av människor som försöker göra något. I detta fall, genomföra ett system med sidor att en användare interagerar med på en mer komplex webbplats. Och det görs så ofta att det rekommenderas som en standard att andra människor kanske gillar att följa, och det finns en mycket specifik uppsättning sätt att man kunde följa detta paradigm. Så, är MVC ett paradigm, och anledningen Vi använder det är att abstrakta bort detaljer från användaren. Vissa saker användaren egentligen inte behöver se. De vill bara ha en bra användarupplevelse, och vi behöver inte ha dem tillgång varje enskild fil som finns på vår webbserver, kanske. Det kan finnas vissa filer som bara användas för att stärka användarupplevelsen, och så att vi kan abstrakt dem bort. Vi kan sorts dölja dem så användaren kan inte arbeta med dem, men vår pages-- vår pages-- vet hur man handskas med dem och kalla dem eller kanske kräver, vill ha dem, eller nåt sånt. Den primära motivationen för MVC är datasäkerhet, eftersom MVC kommer oftast upp i inom ramen för arbetet med databaser. Och framför allt att vi vill hindra användare från direkt påverkar databaser. Vi vill bara göra det indirekt, genom vår filtrering. Eller att se till att allt är OK med att vi gör lite felkontroll eller säkerhet korrektur innan vi skicka den till databasen, där saker kan gå fel, kanske verkligen fel, om vi inte är försiktiga. Så MVC står för Model View Controller. Vad gör alla dessa innebära? I grund och botten är modell din databas. Det är där alla viktiga data till din webbplats lives-- användarnamn, inloggningar, lösenord. Och du kan uppdatera den, se den, ganska mycket allt sånt. Du skulle fråga en databas, skulle du frågar information från databasen. Det är model-- alla uppgifter där din webbplats bor. Vyn är ungefär som användarupplevelsen. Det är de sidor de ser efter De har begärt information. Så kanske de lämnar in deras inloggnings information-- som de skulle göra i en styrenhet, som vi kommer att prata om i en sekund. De anser kanske deras inloggningsuppgifter, och databasen efterfrågas. Information begärs och dras från databasen. Och sedan en gång användarens inloggad i, de ser deras hemsida. Det är en vy, OK? Och regulatorn är vad kallas affärslogik på din webbplats. Och affärslogik är en av de termer som är en slags wishy-washy-- vilja, vad betyder affärslogik detta? I grund och botten ditt företag logik är din PHP. Ditt användarnamn behöver inte att direkt se din PHP, men din PHP är antagligen vad som händer vara att göra förfrågningar till databasen. Så att användaren kommer input information i en vy, som kommer att integrera en styrenhet. Liksom, kommer de att skriva i ett formulär. Hur som bildar processer informationen är styrenheten. Det är PHP som faktiskt gör framställningen till modellen. Och sedan modellen ger information till vyn, vilket ger den till användaren, kanske bäst visualiseras som följer. Så här är vi. Här är vi på vänster, och vår modell View Controller paradigm arrangemang. Hur fungerar det? Den user-- oss-- gör en begära till styrenheten. Vi skickar information såsom genom en HTTP-form. Baserat på att kontrollenhetens jobb är att se till att att vad användaren har gett är inte något som skulle skada modellen. Och så regulatorn kommer att se till att allt är OK. Det kommer att titta mycket noga. Om det finns några fel, kommer det att sluta saker så att användaren inte kan komma till modellen. Men förutsatt att allt är OK och det är en giltig fråga, regulatorn kommer att fråga den model-- det ska begära att lämna information. Modellen kommer att ge det information till en sida som är en vy, det ska överlämna det att sätt, och sedan vyn befolkar informationen begärts från modellen. Så, till exempel om vi pratar om hur du loggar in på ditt Facebook-sida, till exempel. Vyn skulle vara uppgifter som kom ut från den modell som hänvisar till dina vänner och nyheter foder eller sånt, eller hur? Men du skulle inte ser någon annans. Du skulle bli getting-- så du skickar en fråga, du loggar in på model-- ursäkt mig, logga in här på sidan. Regulatorn använder dina inloggningsuppgifter att göra en begäran om att modellen för att göra Se till att du är den du säger att du är. Modellen är som, OK, ja, du är den du säger att du är, så låt mig ge er din nyhetsflöde. Jag ska ge er rådata för din nyhetsflödet till vyn, och sedan vyn gör det söt, bearbetar den på ett sätt att vi är vana vid, visa denna information till användaren. Lägg märke till den anslutning som är inte existerar på detta diagram. Det finns ingen direkt koppling mellan dig och modellen. Det finns alltid denna buffert av styrenheten på ingångssidan, och det finns en buffert av visa på utgångssidan. Kanske du är en bra person, och så kanske du skulle inte göra någon skada på modell, men kanske du inte. Eller kanske det finns någon som är en angripare som skulle kanske vill skada din databas, kanske bort allt från din databas, vilket kan vara mycket dyrt. Uppenbarligen, data som har användar är-- det finns värde att ha användardata. Och så om vi inte sätta denna buffert zonen mellan användaren och database-- användaren och model-- saker kanske inte går så bra för oss. Och så är det viktigt att har detta paradigm där användaren kan interagera med databasen, säker, men de måste gå igenom oss att göra det. Och det är i princip idén med MVC. Det försöker genomföra datasäkerhet. Det försöker skydda modellen från att oavsiktligt eller avsiktligt illvilliga användare. Så vad händer när vi tillämpa detta paradigm? Tja, vi separera data krävs från vår website-- den model-- från logik som implementerar vår webbplats functionality-- den controller-- och från enkla estetik och sida mallar som utgör vår användaren experience-- vyn. Vad betyder det här? Tja, betyder det att du kan göra visningar synlig för användaren. Du kan dölja modellen bort. Och controllers-- användaren kan inte kanske direkt manipulera. De behöver inte få tillgång till ett PHP-kod. De behöver bara se ett formulär där de kan skriva saker i. Så kanske formuläret en vy, styrenheten är PHP att formen lämnar till, controller gör en förfrågan till modellen, modellen ger mer information till en annan vy som visar information för dig. Dina program kan få tillgång till alla dina affärslogik, men användarna kan inte direkt få tillgång till affärslogik. Och ett särskilt, kanske, synliga exempel på detta är du någonsin fått en 403 Forbidden fel. Har du någonsin gått till en bana sida och sett 403 Forbidden? Det är ungefär som 404 Not Found. 403 Forbidden innebär att du försökte komma åt en sida som du inte har tillgång till. Kanske den platsen är med användning av MVC separering att gömma undan sin affärslogik som måste finnas på servern för att för att sidan ska fungera, men inte vill du direkt tillgång till den. Så du kan få en 403 Forbidden fel. Och det skulle inte ens någon roll om du loggat in. Ingen användare kan röra denna punkt PHP-fil. De kan bara röra detta ett, och detta en-- det som de kan touch-- kanske kan interagera med den låsta ned filen mer indirekt än användaren. Så ibland ser vi detta tillstånd fel, detta 403 Förbjudna. Hur ska vi ändra behörigheter så att saker kan eller kan inte ses? När vi gör detta typiskt är att använda en Linux kommando kallas chmod-- C-H-mod. För att göra detta, är ganska formatet simple-- chmod, behörigheter, och vad fil du vill att tillämpa denna förändring. Så, kanske du skulle se något liknande this-- chmod 600 helpers.php. Eller kanske du skulle se this-- chmod ett plus x som innehåller katalogen. Var betyder det dock? Så det finns två olika sätt att behörigheterna är vanligtvis appliceras med chmod. Den första kallas den oktala siffror metod. Detta gäller vanligtvis behörigheter till tre olika kategorier av användare samtidigt. Så chmod 711 fil gör att du rätt att läsa, skriva och köra filen, skulle göra det möjligt others-- specifikt din grupp och world-- bara köra filen. Det är vad detta kan översättas till. Det första numret dit är vad du kan göra, det andra talet är vad din grupp kan göra, och den tredje är vad världen kan göra. Vem som helst som är besöker din sida, det är världen. Vilka är dessa siffror faktiskt översätta till om? Så dessa i princip översätta så här. Om tillstånd är noll, ingenting kan hända. Om det är en, kan du köra file-- om det är din tillåtelse. Om det är två, kan du skriva filen men du kan inte göra något annat. Om det är tre, du kan skriva och köra. Och så vidare, som ni kan se. Och sju innebär att du kan göra allt. Så varför är dessa kallas oktala tal? Tja, om du tänker på det, Här är som expertnätverken och yeses, och om vi tänker på dem som röda och gröna rutor, kanske det gör det lite tydligare. Men om vi tänker på de röda rutor som nollor och de gröna rutor och kära, dessa är faktiskt bara uppsättningar av binära tal, eller hur? 000 översätter till decimal 0; 001, decimal 1; 010 är decimala 2, och så vidare. Och så vi kallar dessa oktala siffror eftersom det finns åtta olika möjligheter. Det finns åtta olika siffror om vi är talar om tre bitar av information-- läs bit, skriv biten och exekveringsbiten. Så nu kan du tala binär, decimal, hex, och oktala. Så du vet hur man kommunicerar med datorer i fyra olika antal system, så det är ganska coolt. Så, förutom det oktala tillstånd system, det finns även den symboliska tillstånd system, vilket är något annorlunda och vanligtvis används bäst att tillämpa eller ta bort tillstånd över hela linjen. Så chmod ett plus x fil kan tillägga rätten att utföra alla tre kategorier users-- själv, din grupp, och världen. Det plus är att lägga till en del. Rätten att köra, det är x. Och det faktum att det gäller för alla tre grupper av användare skulle vara ett. Så this-- ett plus x-- är förmodligen kommer vara exakt samma som chmod 711 fil, eftersom om du går tillbaka och titta på det oktala talet systemet, ettor och sjuor ger oss rätt att köra en fil. Så detta är förmodligen samma. Och du kan använda den här referenshandbok för vad de olika saker i symboliska chmod-ing struktur är. De gröna föremål här skulle vara där alla grönfärgade exemplet var en sekund sedan. Den blå skulle vara blå. Den orange skulle vara orange. Så du kan använda saker till din grupp, till andra, till användaren, eller för alla. Du kan ge dem läsa, skriva och köra tillgång, och du kan lägga till eller ta bort eller tilldela exakt en uppsättning behörigheter som använder denna modell. Hur kan vi kontrollera vad en fil tillstånd systemet är? Innan vi ändrar det, det är förmodligen bra att faktiskt veta vad filrättigheter är. Ett sätt att göra detta är att köra ls men bara justera den lite. Så om jag skriver ls dash L-- det är ett gement L-- kanske Jag ser ut ungefär så här. Det ser lite kryptiskt, men den del som vi verkligen bryr sig om är grejer på vänster där borta. Som faktiskt anger en fil tillstånd system. Och du kan nog säga att det är fick R, W: s och x: s insprängda. De första three-- ignorera den första en för en sekund, vilket Vi ska fördubbla tillbaka till. De första tre efter den first-- så den andra, tredje, och fjärde tecken av att 10 teckensträng är de behörigheter som du har. Så tydligen kan jag läsa, skriva och köra PHP. Jag kan läsa, skriva, och exekvera PHP Webdev, och jag kan läsa och skriva test.php. Min grupp kan göra detta. Så uppenbarligen med PHP och PHP Webdev kataloger Min grupp kan skriva till dem men ingenting annat. Och världen kan inte göra någonting. Så dessa filer inte tillgängliga för allmänheten och om jag försökte åt dem och jag var inte kör Apache för att göra dem tillgängliga, då skulle jag få en 403 fel. Det är ett misslyckande. Jag försökte komma åt en fil, men jag har inte behörighet att göra det. Och vad är det första tecknet? Tja, kan du förmodligen extrapolera här som d's hänvisar till kataloger och strecket avser så kallade "vanliga filer." Och kanske du har sett denna när du har försökte ta bort en fil med rm. Du har sett det kryptiska meddelandet "ta bort vanlig fil" - i detta fall, det skulle vara test.php. Vanlig fil är bara något det är inte en katalog. Det finns ett par andra här, men i allmänhet är du kommer att se d's för kataloger och ingenting för det första elementet. Men det är verkligen allt som finns till den. Du kan kontrollera filen behörigheter som använder ls streck l, du kan ändra dem med chmod. Och, naturligtvis, använder these-- ändra behörigheterna att genomdriva denna MVC paradigm till skydda data på din webbplats och inte tillåta användare att få tillgång till allt, men bara de saker som de behöver att få tillgång till för att din sida att arbeta på det sätt du vill att det ska fungera. Jag är Doug Lloyd. Detta är CS50.