Newsgroup: it.comp.appl.access
Titolo: Usare parzialmente la sicurezza di Access? Lettura del gruppo d'utenti

A97 - Windows 2000/ Windows XP professional
Ciao a tutti.
Mi sono deciso a rendere più sicuro un database che riunisce in sè
utilità usati da tutti i reparti dell'azienda.
Quello che voglio fare però mi sembra un uso solo parziale della
sicurezza offerta da Access, e vorrei chiedere il vostro parere, prima
ancora che il vostro aiuto per fae quello che vorrei.
Invece del Pannello dei comandi ho preparato una barra dei menù
personalizzata, nella quale le voci del primo livello sono le aree, i
reparti.
Sto preparando il file MDW inserendo i gruppi di utenti e gli utenti
stessi.
Vorrei far sì che dopo aver effettuato il login, l'utente veda
abilitati solamente certi menu.
Ho scoperto già come abilitarli e disabilitarli, so come riconoscere
l'utente, ma non come riconoscere il gruppo; ora, siccome la gestione
dei privilegi è sempre bene farla per gruppi, sono bloccato.
(l'altro ieri avevo trovato un documento microsoft, citato in un post
di questo ng, nel quale erano descritte parecchie funzioni relative
alla sicurezza: enumerare i gruppi, gli utenti che ne fanno parte e
tantissime altre cose: anche se non mi pare ci fosse quel che sto
cercando, faceva comodo, ma non trovo più il link... :(  se qualcuno
sa qual'è, me lo direbbe?)
Per la gestione che ho pensato, dovrei fare qualcosa tipo una tabella
nella quale siano specificati i menu esistenti, e per ognuno sai
specifichi quali reparti lo hanno abilitato.
Questo però non è usare la sicurezza di Access, è un affiancarsi ad
essa, perché se non ho capito male per usarla davvero dovrei
specificare per ognuno degli oggetti del db chi può far cosa. Giusto?
Ma per abilitare e disabilitare i menu che ho creato io come faccio?
Spero di non aver fatto un discorso complesso: se no ditemelo che
chiarisco.
Grazie!

Alessio ha scritto:

Direttamente non penso sia possibile, però puoi fare questo:
If IsUserInGroup(CurrentUser(), "Group2") Then
    'Attiva MENU1
ElseIf IsUserInGroup(CurrentUser(), "Group1") Then
    'Attiva MENU2
Else
    'Attiva MENU_RISERVA
End If
Public Function IsUserInGroup(ByVal UserName As String, ByVal GroupName
As
String) As Boolean
    Dim wsp As DAO.Workspace
    Dim grp As DAO.Group
    Dim usr As DAO.User
    Set wsp = DBEngine.Workspaces(0)
    Set usr = wsp.Users(UserName)
    For Each grp In usr.Groups
        If grp.Name = GroupName Then
            IsUserInGroup = True
            Exit For
        End If
    Next grp
End Function
Questa ti serve solo per avere la Lista dei Gruppi:
Public Function ListGroups()
    Dim usr As DAO.User
    Dim grp As DAO.Group
    Dim wrk As DAO.Workspace
    Set wrk = DBEngine.Workspaces(0)
    Set usr = wrk.Users(0)
    For Each grp In usr.Groups
        Debug.Print grp.Name
    Next grp
    Set grp = Nothing
    Set usr = Nothing 
    Set wrk = Nothing 
End Function 
Ciao
@Alex

Grazie!
Prego
-- 
Roberto
-----------------------------------------------
il Sito Comune di it.comp.appl.access
http://www.sitocomune.com
-----------------------------------------------

 If IsUserInGroup(CurrentUser(), "Group2") Then
...cut...

Grazie Alex! Queste due funzioni sono più o meno quelle che avevo
visto nel documento MS cui ho fatto riferimento prima.
Userò tali funzioni, ma quello che volevo dire è che non c'è una
funzioni tipo CurrentUser()...che ne so, una CurrentGroup() :))

 >specificare per ognuno degli oggetti del db chi può far cosa. Giusto?
Grazie mille anche a te, Roberto.
Proverò ad usare delle funzioni per risalire al gruppo dii cui fa
parte l'utente.
Userò la protezione di Access per impostare il tipo di accesso ad ogni
singolo oggetto da parte di ogni gruppo d'utenti, mentre la tabella di
cui ho parlato (a meno che a qualcuno non venga in mente un'idea
migliore) per gestire le sole abilitazioni dei menu della mia barra
personalizzata.