AppleScript中的用户属性/权限

AppleScript中的用户属性/权限,applescript,privileges,finder,Applescript,Privileges,Finder,我想写一个applescript程序,首先检查用户是否有管理员权限,如果没有,然后请求重新登录或其他什么 最终脚本将需要对我刚刚创建的文件夹执行sudo chmod。。。我可以用do脚本和管理员权限来完成 然而,我还没有弄清楚如何为applescript命令请求管理员权限,甚至只是检查用户是否具有管理员权限 有人知道吗?或者至少给我指出一个好的applescript参考?(Apple.com参考资料对我没有帮助) 谢谢。这应该是一个开始:只需使用具有管理员权限的。如果用户没有管理员权限,Appl

我想写一个applescript程序,首先检查用户是否有管理员权限,如果没有,然后请求重新登录或其他什么

最终脚本将需要对我刚刚创建的文件夹执行sudo chmod。。。我可以用do脚本和管理员权限来完成

然而,我还没有弄清楚如何为applescript命令请求管理员权限,甚至只是检查用户是否具有管理员权限

有人知道吗?或者至少给我指出一个好的applescript参考?(Apple.com参考资料对我没有帮助)


谢谢。

这应该是一个开始:

只需使用具有管理员权限的
。如果用户没有管理员权限,Applescript将提示他们输入名称和密码。使用
尝试。。。错误时
阻止,以防用户取消、输入错误的密码或没有管理员权限

如果确实想知道当前用户是否为管理员,请检查该用户是否在管理员组中:

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()

苹果论坛的解决方案:

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

看起来很有意思。这很难理解,正如Philip Regan所说,我是通过命令行来实现的,但它似乎给了我所需要的保护…

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

dscl命令允许您执行各种目录服务任务,其中之一是能够查找用户的帐户类型

命令:dscl。阅读/群组/管理员群组成员资格 将列出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是true还是false,就可以执行各种函数。此外,如果脚本是通过ARD部署或发送的,则可以设置userName变量(上面脚本中的第一行)以使用whoami命令检查当前用户。因此,第一行将如下所示:

set userName to do shell script "whoami"

我有点恼火,因为System Events在user对象中没有这个属性,但是基于id和dscl的查询似乎是最好的选择。为了便于阅读,我使用:

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

注意admin周围的空格。这可以防止它与lpadmin之类的组混淆。

不,我完全知道如何在unix中实现它。问题是如何在applescript中检查用户的权限。很好,但我认为您必须使用shell命令来获取该信息。Applescript本身并没有比“具有管理员权限”更深入的内容。我认为“具有管理员权限”除了do shell脚本之外,对任何东西都不起作用。。。。其他事情都失败了。。。我想我可以把整个想法放在一个试块里。。。但另一个论坛给了我:如果(“80”不在(do shell脚本“id-G”)中,这更聪明,但似乎有效……我认为您需要
chmod
的管理员权限,它将被包装在do shell脚本中。至于
do shell脚本“id-G”
,上面的代码做了同样的事情(注意
id-G-n
),但是使用组名而不是数字,并且正确地处理子字符串(假设有一个编号为180、580或800的组,或者命名为“dbadmin”)。不需要循环,这两个原因都是因为不需要循环来检查数据是否在列表中,而且循环体在
i
上是不变的。移除重复/结束重复。