Du har ret, at sikre en side og sikre elementer er anderledes.
Efter min mening og i praksis synes jeg, at det faktisk er den forkerte tilgang at binde enhver kode til en rolle eller bruger. Knyt i stedet tilladelser til elementer og sider - og bind derefter roller til disse tilladelser. Og selvfølgelig tildeles brugere roller.
Det er vigtigt at have alle tre :
- Brugere
- Roller
- Tilladelser <-- det er det, du mangler
Tilladelser er det, der sikrer elementer og sider, ikke roller eller brugere Din kode burde ikke have nogen anelse om (fordi den ikke behøver det), hvilke brugere eller roller der er - kun navne på tilladelser.
Når en bruger logger ind, griber jeg deres rolle(r). Så henter jeg alle de tilladelser, der er tildelt disse roller (simpelthen en liste over strengværdier).
For eksempel kan jeg på en side have :
- Tilføj element
- Se element
- Slet element
Når jeg koder den side, sikrer jeg faktisk hvert af disse elementer med tilladelsesstrenge, der hedder lignende (addItem, viewItem, deleteItem).
<cfif listContainsNoCase( session.permissions, 'addItem' )>
<!--- code to add item --->
</cfif>
(Bemærk:Jeg anbefaler at bruge et brugerdefineret tag eller en funktion til dette, men med henblik på et eksempel fungerer ovenstående fint).
Hvis du gør det på denne måde, giver det maksimal fleksibilitet og abstraktion. Hvis du sikrer elementer baseret på roller, begrænser du dig selv:
- Tilføjelse af nye roller vil kræve en masse kodeændringer!
- Ændring af tilladelser mellem roller kræver mange kodeændringer!
Hvis du gør det som nævnt ovenfor, behøver du aldrig at ændre din sikkerhedskode i kodebasen, fordi "addItem"-tilladelsen bør altid være på "add item"-logikken, ikke? :)
Hvis du nu tilfældigvis har brug for at oprette en rolle af typen "manager", som har alle brugerrollerne og nogle få udvalgte admin-rettigheder, opretter du blot den rolle og tildeler den de korrekte tilladelser (måske addItem og editItem, men ikke deleteItem) . Bam! Nu har jeg en administratorrolle, som jeg skal tildele til brugere med ingen kodeændringer !
Hvis jeg havde drysset min kode med "er bruger denne rolle"-type ting - ville jeg være nødt til at redigere min kode overalt for at tillade min nye rolle "manager" - yuck!
Giver det mening?
=)