Domanda

Qual è lo schema di database migliore per tenere traccia dei controlli di accesso basati sui ruoli per un'applicazione Web?

Sto usando Rails, ma il plug-in RBAC collegato da Google sembra non mantenuto (solo 300 si impegna in SVN; l'ultima è stata quasi un anno fa).

Il concetto è abbastanza semplice da implementare da zero, eppure abbastanza complesso e importante che vale la pena farlo bene.

Quindi, come possono gli altri progettare e implementare il loro modello RBAC?

È stato utile?

Soluzione

Per quanto ne so piuttosto di base in quell'area, gli attori di base di un RBAC sono:

  • Risorse.
  • Autorizzazioni.
  • Utenti.
  • Ruoli (ad es. gruppi).

Risorse < - richiedono - > ( uno o più ) Autorizzazioni .

Ruoli < - sono raccolte di - > ( uno o più ) Autorizzazioni .

Utenti < - può avere - > ( uno o più ) Ruoli .

Le tabelle per un tale modello sarebbero:

  • il permesso
  • ruolo
  • utente
  • role_permission
  • user_role

Ora potresti voler includere anche qui le risorse se desideri che gli utenti della tua applicazione siano in grado di configurare quali autorizzazioni sono necessarie a una risorsa. Ma non ne ho mai avuto bisogno. Spero che sia d'aiuto.

Altri suggerimenti

Ecco un semplice diagramma per illustrare l'eccellente risposta di Amr Mostafa

inserisci qui la descrizione dell'immagine

Mi capita di lavorare sul sottosistema RBAC qui al lavoro in quel momento ... che coincidenza.

Il mio modello si basa sui mattoni delle diverse entità nel sistema che richiedono autorizzazioni, siano esse attributi da visualizzare / aggiornare o azioni da eseguire. Naturalmente ci sono anche ruoli diversi nel sistema (che possono essere dati agli utenti) e la colla che tiene insieme il tutto è la regola di accesso , che collega un ruolo specifico, un'entità specifica che necessita dell'autorizzazione e la autorizzazione concessa. Una regola di accesso potrebbe apparire come questa:

rule 14: guest role + page name + read permission
rule 46: approver role + add column + execute permission

e così via. Lascio l'ERD come esercizio al lettore ;-) Se hai domande, lascia un commento.

Yuval = Cool

Puoi utilizzare plugin Restful ACL Rails .

Penso che la risposta alla tua domanda sia profonda quanto desideri. Se ti capita di pensare di inserire ruoli nei gruppi e quindi associare i gruppi agli utenti non sarebbe sufficiente. Alla fine dovrai dare autorizzazioni specifiche a un utente su un oggetto specifico (un forum, un video ecc.).

Sono più vicino alla risposta di Yuval, tutto ciò di cui abbiamo bisogno è associare oggetti a livello di progetto + azioni + utenti. Per fornire questo; un oggetto base (Entità) ha perfettamente senso. Qualsiasi oggetto che eredita da Entity può essere facilmente associato a un utente + azione in questo modo.

Poiché desideri anche mantenere le cose semplici; il mio suggerimento sarebbe;

  • Qualsiasi oggetto dovuto a restrizioni rbac dovrebbe derivare da un'entità base.
  • Dovrebbe esserci un elenco di ruoli, che sono uno a uno in relazione con un'entità.
  • Dovrebbe esserci un elenco di relazioni tra utenti e ruoli.

Per fare un ulteriore passo avanti, consiglierei anche quanto segue (per un rbac automatizzato)

  • Uso l'accesso basato sui servizi ai miei oggetti. Questo è; Creo repository di oggetti (che eseguono l'accesso db per me) e accedo a repository tramite funzioni di servizio.
  • Uso un attributo personalizzato all'inizio di ogni funzione di servizio. Questo definisce il ruolo richiesto per accedere a quella funzione.
  • Uso il parametro Utente per accedere a tutte le mie funzioni di servizio e ogni funzione di servizio esegue un controllo di ruolo prima di eseguire se stessa. Reflection mi aiuta a capire quale funzione chiamo e quale tipo di ruolo ha (tramite attributi personalizzati)
  • Eseguo anche un inizializzatore all'avvio della mia applicazione, che controlla tutte le funzioni (e i loro attributi) e vede se ho aggiunto un nuovo ruolo richiesto. Se c'è un ruolo che ho appena aggiunto e non sembra essere nel db, lo crea su db.

Ma ahimè, è disponibile solo per .NET, per quanto ne so Java non ha attributi personalizzati, quindi non è ancora probabile che sia disponibile per Java.

Mi piacerebbe venire con alcuni esempi di codice ma sono troppo pigro per farlo. Ancora se hai domande sul mio modo di rbac; puoi chiedere qui e sicuramente risponderò.

Requisito di ruolo funziona molto bene con l'autenticazione Restful per fornire funzioni di autenticazione basate sui ruoli e è ben mantenuto.

Per le applicazioni .net dovresti guardare qualcosa come Visual Guard http: //www.visual-guard. it / per evitare di dover gestire autorizzazioni e ruoli da zero.

Anche per .net, i provider di appartenenza e di ruolo e l'autorizzazione sono gestiti con la configurazione. http://www.odetocode.com/Articles/427.aspx

Prova https://github.com/ThoughtWorksStudios/piece , è un motore di regole per te per gestire il controllo degli accessi in base al ruolo dell'utente:

  1. Definisci regole di controllo dell'accesso
  2. Combina regole per costruire nuove regole

Puoi trovare l'esempio completo dell'applicazione Rails qui: https://github.com/xli/piece-blog

Introduzione a RBAC -

Il sistema di controllo degli accessi in base al ruolo è un metodo per limitare l'accesso ad "alcune fonti o applicazioni o alcune funzionalità delle applicazioni" in base ai ruoli degli utenti dell'organizzazione.

Qui, le restrizioni possono essere per mezzo di più autorizzazioni, quelle create dall'amministratore per limitare l'accesso e queste autorizzazioni rappresentano collettivamente un ruolo, che verrà assegnato all'utente.

E se andiamo leggermente più in profondità in RBAC, fondamentalmente contiene 3 funzionalità.

1) Autenticazione: conferma l'identità dell'utente. Di solito viene eseguito tramite account utente e password o credenziali.

2) Autorizzazione: definisce cosa l'utente può fare e cosa non può fare in un'applicazione. Ex. & # 8216; Modifica dell'ordine & # 8217; è consentito ma & # 8216; creazione di un nuovo ordine & # 8217; non è consentito.

3) Controllo delle azioni dell'utente sulle applicazioni. - Tiene traccia delle azioni dell'utente sulle applicazioni, nonché chi ha concesso a quale accesso a quali utenti?

Questa è stata un'immagine di base della vista dall'alto del sistema RBAC.

La struttura di base del sistema RBAC può contenere i seguenti componenti: Utenti, ruoli, autorizzazioni o restrizioni, risorse.

  • Autorizzazioni o restrizioni & # 8211; le autorizzazioni rappresentano un accesso a risorsa & # 8217; s.
  • Ruolo & # 8211; Contiene una raccolta di autorizzazioni
  • Utente & # 8211; Ruoli singoli o multipli assegnati all'utente, quindi alla fine l'utente contiene autorizzazioni tramite mezzo di ruolo.

Oltre a questo, puoi anche avere una raccolta di utenti & # 8211; chiamato & # 8211; gruppi e ruolo possono essere assegnati a gruppi, se si desidera supportare scenari complessi. Quindi, queste erano informazioni di base sulla struttura di RBAC.

Mi piace molto questo post sul blog: https: // content. pivotal.io/blog/access-control-permissions-in-rails

EDIT:

Sembra che il ryanb di railscast abbia pensato sulla stessa linea e abbia creato una gemma chiamata cancan https: // github. com / ryanb / cancan usando una tecnica di base simile al post pivotollabs.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top