sql >> Databáze >  >> RDS >> Mysql

ColdFusion:Možnosti aplikace založené na roli?

Máte pravdu, zabezpečení stránky a zabezpečení prvků je jiné.

Podle mého názoru a v praxi si myslím, že vázání jakéhokoli kódu na roli nebo uživatele je ve skutečnosti špatný přístup. Namísto toho svažte oprávnění k prvkům a stránkám – pak k těmto oprávněním přiřaďte role. A uživatelům jsou samozřejmě přiřazeny role.

Je důležité mít všechny tři :

  1. Uživatelé
  2. Role
  3. Oprávnění <-- to je to, co vám chybí

Oprávnění představují zabezpečené prvky a stránky, nikoli role nebo uživatelé Váš kód by neměl mít žádné vodítko (protože to není nutné), jací uživatelé nebo role existují – pouze názvy oprávnění.

Když se uživatel přihlásí, vezmu si jeho role. Poté vezmu všechna oprávnění, která jsou těmto rolím přiřazena (jednoduše seznam hodnot řetězců).

Například na stránce, kterou bych mohl mít:

  • Přidat položku
  • Zobrazit položku
  • Smazat položku

Když kóduji tuto stránku, ve skutečnosti zajistím každý z těchto prvků řetězci oprávnění pojmenovanými podobně ( addItem, viewItem, deleteItem).

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

(Poznámka:K tomu doporučuji použít vlastní značku nebo funkci, ale pro účely příkladu výše uvedené funguje dobře).

Pokud to uděláte tímto způsobem, poskytuje maximální flexibilitu a abstrakci. Pokud zajišťujete prvky založené na rolích, omezujete se:

  • Přidání nových rolí bude vyžadovat mnoho změn v kódu!
  • Změna oprávnění mezi rolemi vyžaduje mnoho změn kódu!

Pokud to uděláte, jak je uvedeno výše, nikdy nebudete muset měnit svůj bezpečnostní kód v rámci kódové základny, protože oprávnění „addItem“ by mělo být vždy na logice „přidat položku“, že? :)

Pokud nyní potřebujete vytvořit roli typu „správce“, která má všechny uživatelské role a několik vybraných administrátorských práv, jednoduše tuto roli vytvoříte a přiřadíte jí správná oprávnění (možná addItem a editItem, ale ne deleteItem) . Bam! Nyní mám roli správce, kterou mohu přiřadit uživatelům s žádnými změnami kódu !

Kdybych svůj kód posypal věcmi typu „je uživatel tato role“ – musel bych svůj kód upravit všude, abych umožnil své nové roli „manažera“ – fuj!

Dává to smysl?

=)



  1. Jak vrátit všechna oprávnění zpět uživateli root v MySQL?

  2. PHP &mySQL:Kdy přesně používat htmlentity?

  3. Vložit při duplicitní aktualizaci v PostgreSQL?

  4. Serializace odstranění z indexů seskupených sloupců