Hoe het rechten systeem werkt

Rick164 edited this page Jan 25, 2015 · 1 revision

Inleiding

SpotWeb kent sinds kort - en op veler verzoek - een rechtensysteem. Dit rechtensysteem dient een aantal doelen:

  • Bijvoorbeeld geen spots kunnen zien als je niet ingelogged bent
  • Het logischer maken van een aantal zaken (zo kan een niet ingelogde gebruiker standaard geen watchlist of downloadlist meer hebben)
  • Het afschermen van een aantal features welke voorheen met settings gedaan werden

Dit alles betekent dat het implementeren van het rechtensysteem een bijzonder ingrijpende wijziging was en is, zeker gezien de grootte van de huidige codebase en de verscheidenheid aan features in SpotWeb.

Daarnaast proberen we met deze feature de verschillende gebruikers van SpotWeb (van 1 user, naar het delen met vrienden, tot het publiekelijk kunnen draaien ervan) te bedienen, gebruikersgroepen welke regelmatig verschillende belangen of wensen hebben.

Al met al, ga je dus ongetwijfeld tegen het rechten systeem aanlopen en deze pagina legt zowel inhoudelijk als technisch uit hoe het op dit moment werkt.

Gebruikers

Spotweb werkt altijd met een gebruiker - of je nu ingelogged bent of niet, onder de motorkap ben jij altijd een bepaalde gebruiker. Niet ingelogged betekent dat je de 'anonymous' user bent, dit is een speciale user met het userid 1.

Naast de anonymous user is er nog een speciale user - 'admin' met userid 2, alle andere users zijn vrij aanmaakbaar.

Deze standaard users hebben niet de mogelijkheid om content te plaatsen (comments, spots), voor de rest zijn ze precies zoals de rechten toegekend zijn in hun groep.

Wis deze gebruikers niet anders zal Spotweb niet fatsoenlijk functioneren.

Het rechten systeem inhoudelijk

Er is uitgegaan van een situatie waarbij Spotweb bewust danwel onbewust publiekelijk beschikbaar is.

Deze keuze is gemaak om een middenweg te bieden tussen de twee uiterste doelgroepen op. Concreet betekent dit dat de site volledig bruikbaar is als je niet inlogged bent. Wel mis je allerlei features die danwel jouw installatie kunnen beinvloeden, danwel de performance of beschikbaarheid van je server kunnen beinvloeden.

Alle keuzes die je terug ziet komen met betrekking tot het rechtensysteem zijn hier op gebaseerd.

Het rechten systeem programmatechnisch

Permissies (rechten)

Binnen Spotweb zijn in https://github.com/spotweb/spotweb/blob/master/lib/SpotSecurity.php een aantal rechten gedefinieerd (op moment van schrijven 27 verschillende rechten), elk recht dat je hebt geeft jou de mogelijkheid iets te doen binnen Spotweb, of andersom - zonder dit recht is het je niet toegestaan dit te doen.

Als voorbeeld is er het recht 'spotsec_retrieve_nzb' - oftewel, het mogen downloaden van een NZB welk vrij voor zich spreekt, maar zo is er ook het 'spotsec_perform_login' recht wat juist weer toestaat om in te loggen.

Een bepaald recht kan ook nog een 'objectid' mee krijgen, dit wil zeggen dat het recht geldig is voor een bepaalde actie. Je kan je bijvoorbeeld voorstellen dat je het gebruik van de SpotWeb API wil beperken tot een of twee paginas, dit objectid staat dit toe. Let wel op - er zijn maar een heel beperkt aantal rechten dat een objectid gebruikt en vereist.

Rechtengroepen

Deze rechten kan je niet rechtstreeks toekennen aan een gebruiker - een gebruiker is alleen lid van een of meerdere rechtengroepen. Deze rechtengroepen hebben een of meerdere rechten welke cumulatief aan de gebruiker toegekend worden.

Spotweb komt standaard met drie groepen 'Anonymous users', 'Authenticated users' en 'Administrators'. In een standaard Spotweb configuratie is de anonymous gebruiker lid van de anonymous group en is een ingelogde gebruiker lid van zowel de anonymous group als de 'authenticated users groep', uiteraard kunnen hier op userniveau nog wijzigingen in aangebracht worden.

Het rechten systeem database technisch

Deze uitleg is puur ter informatie. Spotweb bevat (onder het Admin Panel) een GUI om security groepen en dergelijke te beheren, zelf dus zaken aanpassen in de dataabase is niet aangeraden.

Het rechtensystem bestaat uit de volgende tabellen:

  • grouppermissions - Bepaalt welke rechten er in een groep zitten
  • securitygroups - Bepaalt welke groepen er zijn.
  • usergroups - Koppelt een gebruiker aan een securitygroup.

Om de setting van een authenticated user te wijzigen, kan je dus - als voorbeeld - de volgende stappen doorlopen. Ten eerste creëer je een nieuwe groep in de tabel 'securitygroups', deze groep noem je 'Allow download integration' en als id geef je ze 4.

Vervolgens ken je een aantal rechten toe aan deze groep - dit doe je in de tabel 'grouppermissions'. Het veld 'id' is een willekeurig getal en zal MySQL zelf aanvullen.

'groupid' zet je op 4 - we willen namelijk een recht toekennen voor onze net aangemaakte 'Allow download integration' group. 'Permissionid' zet je op 5 ('spotsec_download_integration') wat toestaat om een downloadmanager te integreren. 'ObjectId' zet je op 'nzbget' wat ons toestaat nzbget te gebruiken.

Vervolgens save je deze nieuwe row, en in de usereditpagina (zichtbaar als je ingelogged bent met de admin user) kan je nu elke willekeurige user koppelen aan deze groep.