OOP classes advies
Dit topic gaat over het indelen van een login systeem in OOP.
(Jullie zullen wel gek worden van al die login systemen.)
Ik weet niet welke classen ik moet maken. Natuurlijk de class User, maar wat nog?
Ik heb steeds de neiging om bij elk nieuw bestand een aparte classe te maken en dan krijg ik zoiets als dit:
login.php met een class Login
register.php met een class Register
enz...
Het hele project is nogal groot. Het heeft ook een control panel, dat ik zo ver mogelijk wil uitbreiden.
Bijvoorbeeld met een lijst van alle gebruikers, lijst van alle acties die de administrators hebben uitgevoerd, accounts bewerken, bezoekersaantallen etc.
Deze dingen moeten ook weer functies hebben zoals bij de gebruikerslijst een manier om alleen een bepaald aantal rijen in de lijst te laten zien, of om de orde van de lijst te veranderen. Bijvoorbeeld dat je ervoor kunt kiezen om de lijst te bekijken die is gesorteeld op registratie datum of laatst ingelogd.
Maar wat dus mijn vraag is, welke classes zou ik moeten maken?
Een aparte Database class dacht ik eerst, maar als je voor elke query een method moet maken, dan krijg je ongeveer 80 methods in die classe?
En moet ik voor administrators (gebruikers met "rechten") een aparte class maken? zoals i.p.v de User class, de Admin class?
Ik vind dit altijd zo moeilijk. Ook als ik van te voren een plan maak, wijk ik er vaak vanaf. Omdat ik steeds nieuwe ideeen krijg.
Gewijzigd op 28/01/2013 18:58:00 door Mark Hogeveen
Quote:
Ik wil een inlog systeem maken. Hiermee moeten gebruikers kunnen inloggen. Deze gebruikers worden beheerd door een SuperAdmin, deze kan bijv. gebruikers verwijderen en aanpassen. De gebruikers mogen ook zichzelf aanmelden, ze krijgen dan een mail met een activatielink en dan kunnen ze ingelogd worden. Deze gebruikers kunnen ook zichzelf aanpassen.
Dat ga ik doen! Ik laat straks zien wat ik heb.
Harry hogeveen op 28/01/2013 18:56:51:
Ik weet niet welke classen ik moet maken. Natuurlijk de class User, maar wat nog?
Kan je die 'natuurlijk' ook uitleggen?
En voor de goede orde, ik niet, want ik ben het daar niet mee eens.
Toevoeging
Ik heb nu een super lange tekst gemaakt over wat het allemaal moet kunnen. Lees maar als je zin hebt. Ik heb hem al wat ingekort.
----------------------------
Login systeem.
Mensen kunnen inloggen met hun emailadres of gebruikersnaam, en hun wachtwoord.
De wachtwoord vergeten functie kun je gebruiken door je emailadres in te vullen.
Er wordt dan een link gestuurd naar dit emailadres (met code in GET variabele)
Deze link verwijst naar een pagina waarop je ke wachtwoord eenmalig opnieuw in kunt stellen.
Elke bezoeker kan zich registreren. De gegevens die worden gevraagd zijn:
Gebruikersnaam, emailadres, wachtwoord, geboortedatum, (captcha)
De registratiedatum wordt ook opgeslagen.
Een emailadres moet bevestigd worden (link in mail)
Op elke beveiligde pagina's moet een bestand worden ge-include dat controleert of
de gebruiker is ingelogd. Ook controleert dit bestand of de gebruiker niet langer
dan 30 minuten inactief is geweest. Dit wordt bijgehouden met een sessie.
Er moet gecontroleerd worden of de login niet langer dan 4 uur geleden is
Anders wordt de gebruiker ook ingelogd.
Er moet ook gecontroleerd worden of er niet 2 verschillende mensen tegelijk op 1 account
zijn ingelogd. Als er meerdere tegelijk zijn ingelogd op hetzelfde account,
wordt iedereen uitgelogd behalve de persoon die het laatst inlogde op dat account.
Een gebruiker kan zijn eigen gegevens veranderen.
Er zijn verschillende soorten gebruikers: user, moderator, administrator
user is een gewone gebruiker
moderator kan verschillende dingen van het systeem aanpassen en gebruikers uitloggen, blokkeren
en waarschuwen. Een waarschuwing bij een gebruiker verschijnt bij het laden van een nieuwe
beveiligde pagina. Het bestand dat daarop is ge-include die deze waarschuwingen uit de database
halen en weergeven. ls een waarschuwing is weergegeven, wordt deze verwijderd en komt deze
niet meer terug.
Een administrator kan alles doen wat hij wil. Zoals hele account data aanpassen, een nieuw
wachtwoord genereren, een account deleten etc.
Het uitloggen is een aparte pagina. Je wordt niet meteen terug gestuurd naar de index.
Op de loguit pagina staat altijd een melding zoals "je bent nu uitgelogd"
Als je uitgelogd werd omdat iemand anders in je account inlogde staat er "Je werd uitgelogd
omdat er al iemand anders inlogde op dit account"
Het controle paneel bevat een lijst van alle leden, die je kunt sorteren. Je kunt ervoor
kiezen om de lijst gesorteerd op registratiedatum te zien.
Je kunt ook bijvoorbeeld ervoor kiezen om alleen de geblokkeerde gebruikers te zien.
Er is ook een soort lijst waarin alles staat wat een moderator of administrator heeft gedaan.
Iedereen die toegang heeft tot het controlepaneel kan deze lijst zien en weet zo wat anderen
hebben gedaan.
Ook is er een lijst waar errors in komen te staan, als die er zijn.
Gewijzigd op 28/01/2013 19:59:58 door Mark Hogeveen
Harry hogeveen op 28/01/2013 19:49:34:
Hoezo niet? Waarom geen User class?
Waarom wel?
Waarom niet, omdat dat helemaal niet nodig is in een omgeving als php. Een user class zou in mijn ogen de gegevens van de user moeten beheren. Alleen omdat php stateless is, is daar helemaal geen sprake van. Bij elke aanroep begin je weer helemaal van voren af aan en wordt er dus helemaal niets beheerd. Het enige wat de user class werkelijk zou kunnen doen is gegevens ophalen en weer wegschrijven. Er is geen sprake van reageren op events, er is geen sprake van regelmatige updates, bijhouden van actieve tijd etc. Al die zaken worden op request basis behandeld en in mijn ogen is een php OOP omgeving veel verstandiger op te zetten uitgaande van het request, dan van een object als een user.
Dus, waarom wel?
Gewijzigd op 28/01/2013 20:05:37 door Erwin H
Een Userclass zou je eigenlijk pas nodig hebben in Java bijvoorbeeld.
Over je omschrijving, probeer zaken als "Op elke beveiligde pagina's moet een bestand worden ge-include..." te vermijden voorlopig. Dit is al heel erg implementatie en daar ben je voorlopig nog niet mee bezig.