(software personalizzato) Regole di sicurezza su ogni record quando si utilizzano i gruppi di utenti per applicazione

4

Sto lavorando con software personalizzato qui, quindi non preoccuparti di Microsoft, qualsiasi cosa, Apri nulla o qualcos'altro. Rimaniamo fedeli alla teoria di come dovrebbe andare insieme.

Diciamo che ho un sistema / database utente.

Il database ha una tabella di utenti e i relativi gruppi di utenti associati (Admin, supporto IT, Manager, Segreteria, client, guest). Questi non sono gerarchici, ma piuttosto appartenenze a gruppi. Ad esempio, Alice può essere un amministratore e un cliente se necessario.

Le autorizzazioni a un'applicazione sono assegnate al gruppo e, nel caso di assegnazione di più gruppi a un utente, le autorizzazioni formano un semplice OR binario di diritti (ad esempio, l'amministratore ha X, l'ospite ha Y, quindi l'utente ottiene X e Y).

Le applicazioni sono un modo per fare le cose in un'applicazione, impediscono l'accesso o lo consentono. Ad esempio, hai accesso a "StackExchange" ma solo a Read - o hai accesso a post, o strumenti di moderatore, ecc ...

Quindi, per ricapitolare, gli utenti ottengono gruppi che regolano i diritti a cui possono accedere.

Il concetto con cui ho problemi è il blocco di record specifici per il gruppo di utenti, soprattutto se stiamo lavorando su più applicazioni. Ad esempio, solo il gruppo di amministratori può visualizzare alcuni post nell'applicazione "StackExchange".

Non voglio aggiungere diritti ad ogni record, e non voglio rendere il codice ridondante dell'applicazione con una piccola modifica.

Come ti avvicineresti a questo?

    
posta Incognito 29.04.2011 - 18:12
fonte

3 risposte

3

Oltre agli ACL un altro approccio comune è l'uso delle regole. Quindi non definisci i diritti a livello di record, ma in base alle caratteristiche dei record.

BaseRight : leggi i post

Regole : post con x upvotes, post creati dall'utente corrente, tutti i post

Queste regole sono costituite da un nome e da una logica di programma. Possono essere molto flessibili, ad esempio frammenti di query SQL. Nel software che sviluppo al lavoro, anche gli amministratori possono definire nuove regole.

I diritti effettivi ora sono una combinazione di diritti di base e regole con parametri facoltativi.

Raccomando di default di non accedere e di evitare i diritti negativi perché rende l'implementazione molto più semplice e quindi meno errori di potatura: puoi semplicemente scorrere tutte le regole e non appena una regola dice "okay", hai finito . Per ovvi motivi occorre prestare particolare attenzione quando ciò viene fatto in SQL, ma il miglioramento delle prestazioni su query con set di risultati enormi potrebbe valerne la pena.

Esempi

Ad esempio, lo pseudo ruolo utente anonimo potrebbe avere ragione:

Giusto : legge i post di alta qualità basati su

  • BaseRight: leggi i post
  • Regole: post con x upvotes
  • Parametro: x = 3

Un amministratore del sito avrà ragione:

Giusto : leggi tutti i post in base a

  • BaseRight: leggi i post
  • Regole: tutti i post
risposta data 30.04.2011 - 12:48
fonte
2

Sembra che tu voglia avere alcuni record limitati a determinati gruppi e alcuni (la maggior parte?) record senza restrizioni.

Poiché un altro modo di dire senza restrizioni è "ognuno ha accesso", sembra che sia necessario aggiungere il concetto di un gruppo chiamato "tutti", a cui appartengono tutti gli utenti del sistema.

Quindi puoi autorizzare esplicitamente o implicitamente i record non limitati come accessibili al gruppo "tutti".

    
risposta data 29.04.2011 - 18:55
fonte
1

Non sono sicuro che ci sia un girovagare con una tabella di permessi per risorsa.

  1. Avere una tabella delle risorse indicizzata da un ID risorsa.
  2. avere una tabella di ruolo indicizzata da un id di ruolo.
  3. avere una tabella utenti indicizzata da un id utente.
  4. Avere una tabella delle autorizzazioni che fa riferimento alle chiavi precedenti.

Aggiunge un po 'di overhead ma con i tipi di dati corretti dovrebbe essere veloce per eseguire query anche con set di dati di grandi dimensioni.

    
risposta data 30.04.2011 - 13:12
fonte

Leggi altre domande sui tag