Свойства/привилегии пользователя в AppleScript

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

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

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

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

Благодарю.


person Brian Postow    schedule 16.11.2009    source источник


Ответы (5)


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

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

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

person Brian Postow    schedule 16.11.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()
person outis    schedule 16.11.2009
comment
Я не думаю, что с правами администратора работает с чем-либо, кроме сценария оболочки .... другие вещи просто терпят неудачу ... Я полагаю, что МОГ просто поместить все мысли в блок try ... но другой форум дал мне: если (80 нет в (сделайте идентификатор сценария оболочки -G)) Что более умно, но, похоже, работает... - person Brian Postow; 16.11.2009
comment
Я думал, что вам нужны права администратора для chmod, которые будут завернуты в сценарий оболочки. Что касается do shell script "id -G", приведенный выше код делает то же самое (обратите внимание на id -G -n), но использует имена групп, а не числа, и правильно обрабатывает подстроки (представьте, что есть группа с номером 180, 580 или 800 или с именем 'dbadmin'). - person outis; 17.11.2009

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

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

Команда: dscl . read /Groups/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"
person Community    schedule 10.12.2009
comment
Нет необходимости в цикле, потому что вам не нужен цикл для проверки того, находятся ли данные в списке, а также потому, что тело цикла инвариантно относительно i. Удалить повтор/конец повтора. - person outis; 16.12.2009

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

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

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

person Joshua See    schedule 19.06.2012

Через MacScripter.net это должно быть началом: Управление разрешениями (страница 2 из 2)

person Philip Regan    schedule 16.11.2009
comment
Нет, я знаю все о том, как это сделать в Unix. Вопрос в том, как проверить разрешения ПОЛЬЗОВАТЕЛЯ в applescript. - person Brian Postow; 16.11.2009
comment
Хорошо, но я думаю, вам придется использовать команды оболочки, чтобы получить эту информацию. Сам Applescript не становится намного глубже, чем с правами администратора. - person Philip Regan; 16.11.2009