Пользовательские свойства / привилегии в AppleScript - PullRequest
2 голосов
/ 16 ноября 2009

Я хочу написать программу appleScript, которая сначала проверяет, есть ли у пользователя права администратора, а если нет, то запрашивает повторный вход или что-то в этом роде.

В конце концов сценарию понадобится выполнить sudo chmod для папки, которую я только что создал ... Я могу сделать это с помощью сценария do и с привилегиями администратора.

Однако я не выяснил, как запросить права администратора для команды appleScript или даже просто проверить, есть ли у пользователя права администратора.

Кто-нибудь знает? или, по крайней мере, укажите мне ХОРОШУЮ справку о яблочном сценарии? (Ссылка на Apple.com мне не помогает)

спасибо.

Ответы [ 5 ]

5 голосов
/ 16 ноября 2009

Решение с форума Apple:

if ("80" is not in (do shell script "id -G")) then
   Error....

, кажется, делает трюк. Трудно читать, и, как сказал Филип Риган, я делаю это через командную строку, но, похоже, это дает мне необходимую защиту ...

1 голос
/ 19 июня 2012

Меня немного раздражает, что у системных событий нет свойства для объекта пользователя для этого, но запросы на основе id и dscl кажутся лучшим выбором. Для удобства чтения я использую:

set imadmin to " admin " is in (do shell script "groups")

Обратите внимание на пробелы вокруг admin. Это предотвращает его смешивание с такими группами, как lpadmin.

1 голос
/ 10 декабря 2009

Вот еще одно альтернативное решение, о котором еще никто не упомянул.

Команда dscl позволяет вам выполнять различные задачи службы каталогов
, и одной из них является возможность поиска типа учетной записи пользователя.

Команда: dscl. читать / Группы / admin GroupMembership перечислит все учетные записи администратора
в OS X.

Так что, если вы хотите включить это в AppleScript, вы можете сделать следующее:

set userName to "whatever username you wanted to check"
set readAdminGroup to do shell script "dscl . read /Groups/admin GroupMembership"
set AppleScript's text item delimiters to " "
set adminNames to text items of readAdminGroup

--loop through Admin Group to check if username exists
repeat with i in adminNames
 if adminNames does not contain userName then
  set isAdmin to false
 else
  set isAdmin to true
 end if
end repeat

return isAdmin 

Как только вы узнаете, является ли переменная isAdmin истинной или ложной, вы можете
выполнять различные функции. Кроме того, если сценарий развертывается или отправляется через ARD, вы можете установить переменную userName (первая строка в приведенном выше сценарии) для проверки текущего пользователя с помощью команды whoami. Поэтому первая строка будет выглядеть так:

set userName to do shell script "whoami"
1 голос
/ 16 ноября 2009

Просто используйте with administrator privileges. Если у пользователя нет прав администратора, Applescript запросит у него имя и пароль. Используйте блок try ... on error на случай, если пользователь отменит, введет неправильный пароль или просто не имеет прав администратора.

Если вы действительно хотите узнать, является ли текущий пользователь администратором, убедитесь, что он входит в группу администраторов:

on amIAdmin()
    set prevDelims to AppleScript's text item delimiters
    set AppleScript's text item delimiters to " "
    set groups to do shell script "id -G -n"
    set groupList to text items of groups
    set isAdmin to "admin" is in groupList
    set AppleScript's text item delimiters to prevDelims
    return isAdmin
end isAdmin

amIAdmin()
0 голосов
/ 16 ноября 2009
...