Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Como saber si el usuario logueado tiene permisos administrativos (https://www.clubdelphi.com/foros/showthread.php?t=61342)

JoAnCa 04-11-2008 17:28:34

Como saber si el usuario logueado tiene permisos administrativos
 
Hola a todos
Quiero para autenticarse en mi programa, usar los mismos usuarios de windows, pero solo podra hacer cambios el que tenga permisos administrativos, un usuario estandar tendra derechos de solo lectura.

El problema está en como identificar los derechos de cada usuario, es decir a que Grupo pertenece (Administradores, Usuario Avanzado, Invitado, etc.).
Tambien como saber todos los usuarios declarados, se como obtener el usuario actualmente logueado, pero los demas como seria?

De que forma puedo hacerlo con mi programa delphi?

kalisto 04-11-2008 18:06:04

Los nombres de usuario los puedes obtener mediante la función NetUserEnum. y la misma funcion tambien nos dice los privelegios del mismo administrador, invitado, o usuario.

kalisto 04-11-2008 18:10:02

Con este codigo puedes averiguar si el usuario logeado es admin.
Código Delphi [-]
unit WindowsUser; interface uses Windows; //returns True if the currently logged Windows user has Administrator rights function IsWindowsAdmin: Boolean; implementation const SECURITY_NT_AUTHORITY: TSIDIdentifierAuthority = (Value: (0, 0, 0, 0, 0, 5)) ; const SECURITY_BUILTIN_DOMAIN_RID = $00000020; DOMAIN_ALIAS_RID_ADMINS = $00000220; function IsWindowsAdmin: Boolean; var hAccessToken: THandle; ptgGroups: PTokenGroups; dwInfoBufferSize: DWORD; psidAdministrators: PSID; g: Integer; bSuccess: BOOL; begin Result := False; bSuccess := OpenThreadToken(GetCurrentThread, TOKEN_QUERY, True, hAccessToken) ; if not bSuccess then begin if GetLastError = ERROR_NO_TOKEN then bSuccess := OpenProcessToken(GetCurrentProcess, TOKEN_QUERY, hAccessToken) ; end; if bSuccess then begin GetMem(ptgGroups, 1024) ; bSuccess := GetTokenInformation(hAccessToken, TokenGroups, ptgGroups, 1024, dwInfoBufferSize) ; CloseHandle(hAccessToken) ; if bSuccess then begin AllocateAndInitializeSid(SECURITY_NT_AUTHORITY, 2, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, 0, 0, 0, 0, 0, 0, psidAdministrators) ; for g := 0 to ptgGroups.GroupCount - 1 do if EqualSid(psidAdministrators, ptgGroups.Groups[g].Sid) then begin Result := True; Break; end; FreeSid(psidAdministrators) ; end; FreeMem(ptgGroups) ; end; end; end.

JoAnCa 11-11-2008 21:15:42

Cita:

Empezado por kalisto (Mensaje 324116)
Los nombres de usuario los puedes obtener mediante la función NetUserEnum. y la misma funcion tambien nos dice los privelegios del mismo administrador, invitado, o usuario.

Muchas gracias kalisto, me sirvio el ejemplo que me diste, pero me queda una duda
Como usar la funcion NetUserEnum, cual es su sintaxis, la busque en la ayuda pero no me aparece


La franja horaria es GMT +2. Ahora son las 10:51:43.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi