AppleScript中的用户属性/权限

时间:2009-11-16 16:51:46

标签: applescript privileges finder

我想编写一个AppleScript程序,首先检查用户是否具有管理员权限,如果没有,则请求重新登录或其他内容。

最终,脚本需要对我刚创建的文件夹执行sudo chmod ...我可以使用do脚本和管理员权限来执行此操作。

但是我还没想出如何为applecript命令请求admin privs,或者甚至只检查用户是否具有admin privs。

有人知道吗?或者至少指点一下GOOD Applecript ref? (Apple.com参考没有帮助我)

感谢。

5 个答案:

答案 0 :(得分:5)

Apple论坛的解决方案:

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

似乎可以解决问题。这很难读,正如Philip Regan所说,我是通过命令行完成的,但似乎给了我需要的保护......

答案 1 :(得分:1)

只需使用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()

答案 2 :(得分:1)

这是另一个没有人提及的替代解决方案。

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"

答案 3 :(得分:1)

我有点恼火,系统事件在用户对象中没有属性,但基于id和dscl的查询似乎是最好的选择。为了便于阅读,我使用:

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

请注意管理员周围的空格。这可以防止它与lpadmin这样的组混淆。

答案 4 :(得分:0)

通过MacScripter.net这应该是一个开始:Managing Permissions (page 2 of 2)