#macos #nsuserdefaults #cfpreferences
#macos #nsuserdefaults #cfpreferences
Вопрос:
Если у моего приложения есть права доступа (например, при запуске как root
), как оно может получить доступ к настройкам конкретного пользователя?
Например, предположим, что пользователь перезапускает из обычной учетной записи (администратора) мое обычное приложение (пакет) как root, например, с помощью sudo, вот так:
sudo /Applications/MyApp.app/Contents/MacOS/MyApp
или даже из приложения с
AuthorizationExecuteWithPrivileges()
Если мое приложение теперь вызовет NSUserDefaults.standardUserDefaults
, оно получит доступ к префиксам, хранящимся в домашнем каталоге пользователя root.
Мне нравится, чтобы это мое приложение могло вместо этого получать доступ к настройкам пользователя, вошедшего в систему.
Ответ №1:
Я понял, что должен быть способ, потому что я могу сделать то же самое с defaults
помощью команды: я могу указать путь к файлу plist, например:
sudo -s
defaults read /Users/username/Library/Preferences/some.plist.name
Это будет считывать префиксы этого пользователя, даже если whoami
возвращает root
.
Итак, решение состоит в том, чтобы сделать это:
NSString *domain = @"/Users/username/Library/Preferences/some.plist.name";
NSUserDefaults myDefaults = [[NSUserDefaults alloc] initWithSuiteName:domain];
А затем использовать myDefaults
все мое приложение.
Обновить
На самом деле, это не работает. Сначала я думал, что это так, но, похоже, это просто даст доступ к настройкам пользователя root.
Итак, хотя должен быть способ выполнить это (если команда defaults может это сделать, тогда мы тоже должны), но это не через NSUserDefaults. Возможно, это работает с CFPreferences
API. Придется продолжать расследование.