sql >> Databasteknik >  >> RDS >> Mysql

ColdFusion:Applikationsalternativ baserade på roll?

Du har rätt, att säkra en sida och säkra element är annorlunda.

Enligt min åsikt och i praktiken tycker jag att det är fel att knyta vilken kod som helst till en roll eller användare. Knyt istället behörigheter till element och sidor – knyt sedan roller till dessa behörigheter. Och naturligtvis tilldelas användare roller.

Det är viktigt att ha alla tre :

  1. Användare
  2. Roller
  3. Behörigheter <-- det här är vad du saknar

Behörigheter är vad som säkrar element och sidor, inte roller eller användare Din kod bör inte ha någon aning (eftersom den inte behöver det) vilka användare eller roller som finns - bara namn på behörigheter.

När en användare loggar in tar jag tag i deras roll(er). Sedan tar jag tag i alla behörigheter som är tilldelade dessa roller (helt enkelt en lista med strängvärden).

På en sida kan jag till exempel ha:

  • Lägg till objekt
  • Visa objekt
  • Ta bort objekt

När jag kodar den sidan säkrar jag faktiskt var och en av dessa element med behörighetssträngar som heter liknande (addItem, viewItem, deleteItem).

<cfif listContainsNoCase( session.permissions, 'addItem' )>
    <!--- code to add item --->
</cfif>

(Obs! Jag rekommenderar att du använder en anpassad tagg eller funktion för detta, men som exempel fungerar ovanstående bra).

Om du gör det på det här sättet ger det maximal flexibilitet och abstraktion. Om du säkrar element baserade på roller, begränsar du dig själv:

  • Att lägga till nya roller kommer att kräva många kodändringar!
  • Att ändra behörigheter mellan roller kräver många kodändringar!

Om du gör det som nämnt ovan kommer du aldrig behöva ändra din säkerhetskod i kodbasen, eftersom "addItem"-behörighet alltid bör finnas på "add item"-logiken, eller hur? :)

Om du nu skulle behöva skapa en roll av typen "manager", som har alla användarroller och några få utvalda administratörsrättigheter, skapar du helt enkelt den rollen och tilldelar den rätt behörigheter (kanske addItem och editItem, men inte deleteItem) . Bam! Nu har jag en chefsroll att tilldela användare utan inga kodändringar !

Om jag hade stänkt min kod med "är användaren denna roll" typ av saker - jag skulle behöva redigera min kod överallt för att tillåta min nya roll "manager" - yuck!

Är det vettigt?

=)



  1. SQL RENAME TABLE kommando

  2. Allmänt fel:1005 Kan inte skapa tabell med Laravel Schema Build och främmande nycklar

  3. Vilken är den bästa databasstrukturen för att behålla flerspråkig data?

  4. Aktiverar PostgreSQL-stöd i PHP på Mac OS X