1

Я перемещаю некоторые файлы в каталог/Applications по моему приложению и используя SMJobBless() для прав на листинг для прав администратора.Запрашивать права администратора только для стандартных учетных записей

Но он запрашивает учетные данные администратора для любого типа учетной записи admin или standard_user, можем ли мы поставить чек и попросить учетные данные администратора только для стандартных пользователей с помощью любого объектно-ориентированного API?

Редактировать - Если кто-то пытались или прошли через процесс установки Dropbox, то Dropbox инсталлятор делает то же самое (т.е. он просит права администратора только для стандартных счетов для копирования его .app файла/Applications).

+0

я думаю, что нет публичного доступного APIs, чтобы сделать это, так как яблоко позволяет использование только внутри приложения песочницы. поэтому я предполагаю, что вы джейлбрейкер, а затем вы можете установить и использовать все общедоступные библиотеки lib для разработки unix, такие как gnu или bsd. без джейлбрейка вы не сможете получить root-доступ к системе. – thorb65

+0

@ thorb65 Вы пытались установить Dropbox во время процесса установки. Он копирует его .app-файл (после загрузки) в каталог/Applications, а для учетной записи администратора он не устанавливает пароль. Он запрашивает только привилегии для стандартных учетных записей. Интересно, как это делает Dropbox? –

+0

Кто-нибудь пробовал эту или любую помощь для возможного обходного пути? –

ответ

1

На основании ответа на другой вопрос я сделал файл, который вам подходит (я только что перевел его с C на Objective-C и удалил printf, исходная ссылка находится в конце ответ).

NSPrivileges.h

#import <Foundation/Foundation.h> 

@interface NSPrivileges : NSObject 

+(BOOL)hasAdminPrivileges; 

@end 

NSPrivileges.m

#import "NSPrivileges.h" 
#include <stdio.h> 
#include <unistd.h> 
#include <sys/types.h> 
#include <strings.h> 
#include <pwd.h> 
#include <grp.h> 

@implementation NSPrivileges 

+(BOOL)hasAdminPrivileges{ 
    uid_t current_user_id = getuid(); 
    struct passwd *pwentry = getpwuid(current_user_id); 
    struct group *grentry = getgrgid(getgid()); 

    struct group *admin_group = getgrnam("admin"); 
    while(*admin_group->gr_mem != NULL) { 
     if (strcmp(pwentry->pw_name, *admin_group->gr_mem) == 0) { 
      return YES; 
     } 
     admin_group->gr_mem++; 
    } 
    return NO; 
} 

@end 

Теперь вам просто нужно импортировать NSPrivileges.h в файл, который необходимо знать, если пользователь является admin или нет, и используйте команду [NSPrivileges hasAdminPrivileges], чтобы узнать (она вернет BOOL, так что с ней будет легко справиться). Надеюсь, что это поможет тебе.

Вот моя ссылка: Objective C and OS user type

+0

Спасибо vitormm ... –

Смежные вопросы