Pergunta

Quero que certas funções no meu aplicativo sejam acessíveis apenas se o usuário atual for um administrador.

Como posso determinar se o usuário atual está no grupo de administradores locais usando o Python no Windows?

Foi útil?

Solução

Você poderia tentar isto:

import ctypes
print ctypes.windll.shell32.IsUserAnAdmin()

Outras dicas

import win32net


def if_user_in_group(group, member):
    members = win32net.NetLocalGroupGetMembers(None, group, 1)
    return member.lower() in list(map(lambda d: d['name'].lower(), members[0]))  


# Function usage
print(if_user_in_group('SOME_GROUP', 'SOME_USER'))

Claro que, no seu caso, 'algum_group' será 'administradores'

Eu gostaria de dar algum crédito para Vlad Bezden, porque sem o uso do módulo Win32NET, essa resposta aqui não existiria.

Se você realmente quer saber se o usuário tem a capacidade de agir como um administrador passado uac Você pode fazer o seguinte. Ele também lista os grupos em que o usuário atual está, se necessário.
Vai funcionar em a maioria (tudo?) configurações de idiomas.
O grupo local apenas se apressa em começar com "admin", o que geralmente faz ...
(Alguém sabe se algumas configurações serão diferentes?)

Para usar este snippet de código, você precisará ter pywin32 Módulo Instalado, se você não o tiver, mas pode obtê -lo da Pypi: pip install pywin32

Importante saber:
Pode ser importante para alguns usuários / codificadores que a função os.getlogin() está disponível apenas desde o Python3.1 em sistemas operacionais do Windows ...Documentação Python3.1

Referência do Win32Net

from time import sleep
import os
import win32net

if 'logonserver' in os.environ:
    server = os.environ['logonserver'][2:]
else:
    server = None

def if_user_is_admin(Server):
    groups = win32net.NetUserGetLocalGroups(Server, os.getlogin())
    isadmin = False
    for group in groups:
        if group.lower().startswith('admin'):
            isadmin = True
    return isadmin, groups


# Function usage
is_admin, groups = if_user_is_admin(server)

# Result handeling
if is_admin == True:
    print('You are a admin user!')
else:
    print('You are not an admin user.')
print('You are in the following groups:')
for group in groups:
    print(group)

sleep(10)

# (C) 2018 DelphiGeekGuy@Stack Overflow
# Don't hesitate to credit the author if you plan to use this snippet for production.

Oh e onde from time import sleep e sleep(10):

Insira as próprias importações/código ...

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top