Database condiviso con visibilità esclusiva

Ciao a tutti.
Mi chiamo Roberto.
Avrei bisogno di chiarire un concetto che ancora non mi è chiaro.
Posso approfittare di voi ?

Vorrei capire come avviene la gestione dei databases da parte di Rails.
Per esempio dato un db unico per tutti gli utenti, sul quale ogni utente
possa vedere solo i propri record, qual’è il modo di configurare
ActiveRecord ?
Meglio definire una relazione con l’utente ed utilizzarla per l’accesso
ai suoi record esclusivi ?
Oppure si può demandare il lavoro al db engine, creando una istanza per
ogni utente/connessione/sessione ? o una tabella temporanea ?
oppure si può chiedere a ActiveRecord di istanziare una copia dei dati
per ogni utente/connessione/sessione ?

In pratica, vorrei poter preparare le classi ActiveRecord sui vari
databases e poi potervi accedere con utenti diversi, ed ognuno di essi
possa consultare/editare solo i propri record.

Spero di avere reso l’idea (che già è confusa nella mia testa).

Grazie 1000
Ogni consiglio è apprezzato.

fellons

Io utilizzerei assolutamente una relazione, poi con CanCanCan o una
qualunque gemma gestisci facilmente i permessi.
Puoi comunque arrangiarti con un semplice scope se le relazioni non sono
troppo complicate.

Le altre soluzioni mi sembrano adatte a situazioni decisamente pi
complesse :slight_smile:

2015-03-04 18:01 GMT+01:00 Roberto F. [email protected]:

Ciao Roberto,

non so il caso specifico ma un’idea potrebbe essere utilizzare
l’architettura multi-tenant, una gemma che lo implementa è
GitHub - influitive/apartment: Database multi-tenancy for Rack (and Rails) applications.

Ciao,

Alessio Rocco

On mercoledì, mar 4, 2015 at 6:01 PM, Roberto F.
[email protected], wrote:
Ciao a tutti.

Mi chiamo Roberto.

Avrei bisogno di chiarire un concetto che ancora non mi è chiaro.

Posso approfittare di voi ?

Vorrei capire come avviene la gestione dei databases da parte di Rails.

Per esempio dato un db unico per tutti gli utenti, sul quale ogni utente

possa vedere solo i propri record, qual’è il modo di configurare

ActiveRecord ?

Meglio definire una relazione con l’utente ed utilizzarla per l’accesso

ai suoi record esclusivi ?

Oppure si può demandare il lavoro al db engine, creando una istanza per

ogni utente/connessione/sessione ? o una tabella temporanea ?

oppure si può chiedere a ActiveRecord di istanziare una copia dei dati

per ogni utente/connessione/sessione ?

In pratica, vorrei poter preparare le classi ActiveRecord sui vari

databases e poi potervi accedere con utenti diversi, ed ognuno di essi

possa consultare/editare solo i propri record.

Spero di avere reso l’idea (che già è confusa nella mia testa).

Grazie 1000

Ogni consiglio è apprezzato.

fellons

Posted via http://www.ruby-forum.com/.


Ml mailing list

[email protected]

http://lists.ruby-it.org/mailman/listinfo/ml

+1

2015-03-04 18:07 GMT+01:00 Luca P. [email protected]:

Ciao Roberto,

d un’occhiata qui:

GitHub - ifad/eaco: Eaco is an Attribute-Based Access Control authorization framework for Ruby.

l’ho presentata qui in lista proprio qualche giorno fa :slight_smile:

happy hacking,

~Marcello

~ [email protected]
~ http://sindro.me/

Solitamente funziona cos. Ti fai una tabella users (modello User) o
la fai creare an sistema di autenticazione tipo Devise.
Una volta che hai quello svilupperai il tuo database in modo da avere
diverse relazioni che fanno riferimento in modo diretto o indiretto ad
uno specifico user_id.

Se io mi loggo come user_id 1 e devo vedere solo i miei post farai
delle relazioni in modo tale da poter fare una cosa del genere:

current_user.posts # tutti i record
current_user.posts.pagiante(per_page: 10, page: params[:page]) #

record paginati supponendo che usi will_paginate
current_user.posts.search(params[:q]) # ricerca nei post
supponendo che usi Ransack

etc etc.

Poi per magari hai una relazione indiretta, tipo un utente ha molti
blog che hanno molti posts. A quel punto sar poco pi complicato
perch nel modello User avrai una cosa tipo

has_many :blogs
has_many posts, through: :blogs

e quanto scritto sopra rimane.

Insomma, questo il classico quando si tratta di ‘vedere solo i propri
record’.

Ok.
Grazie a tutti.
Effettivamente l’uso di relazioni rende tutto molto semplice.

Mi ero incartato sulla gestione in tabelle separate e/o l’uso di tabelle
temporanee allo scopo di risparmiare spazio sul database e per gestire
accessi anonimi, ma era veramente una pessima idea.

Un semplice join fra ‘articoli’ ed ‘utenti’ risolve la maggior parte dei
miei problemi.

Per gli accessi anonimi, ancora non so - devo rivedere il mio codice, ma
penso utilizzerò utenti temporanei.

Valuterò l’uso di gemme.

Thanks
fellons