Запрос прав администратора только для стандартных учетных записей
Я перемещаю некоторые файлы в каталог /Applications моим приложением и использую SMJobBless() для повышения прав администратора.
Но он запрашивает учетные данные администратора для любого типа учетной записи - admin или standard_user. Можем ли мы поставить проверку и запросить учетные данные администратора только для обычных пользователей, используя любой API-интерфейс target-c?
Редактировать - если кто-то пытался или прошел процесс установки Dropbox, то установщик Dropbox делает то же самое (т.е. он запрашивает привилегии администратора только для стандартных учетных записей для копирования его.app-файла в /Applications).
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 в файл, который должен знать, является ли пользователь администратором или нет, и использовать команду [NSPrivileges hasAdminPrivileges]
выяснить (он вернет BOOL
так что с этим будет легко иметь дело). Надеюсь, это поможет вам.
Вот моя ссылка: Цель C и тип пользователя ОС