防止用户更改您的 Cocoa 应用创建的目录的权限
Prevent user from changing permissions of a directory created by your Cocoa app
我们希望阻止用户通过以下方式访问我们从非沙盒应用创建的目录:
FileManager.createDirectory(atPath:withIntermediateDirectories:attributes:) //where path is ~/Library/Application Support/our.bundle.identifier/ourdir
为此,我们没有为此目录设置任何权限,从而确保他们无法通过以下方式打开它:
fileManager.setAttributes([.posixPermissions: 00000], ofItemAtPath: path) //no permissions
但是,用户只需右键单击它,选择“获取信息”,然后将其从“所有人都无法访问”更改为“读取和写入”即可获得访问权限。
但我发现的其他目录并非如此。例如,位于 /Users/Guest/
的桌面(或您未登录的任何其他用户帐户)也对每个人都没有访问权限,当您尝试更改它时,您会收到错误消息:
The operation can’t be completed because you don’t have the necessary permission.
我看到的另一个区别是该目录禁用了锁定复选框,但我们的应用程序创建的目录启用了该复选框。
这正是我们应用创建的目录所需要的。如何确保用户没有权限更改此目录的权限?
无法访问某些文件夹的原因是它们归不同用户所有,而登录用户没有权限。但是你的应用程序也不会,因为它在用户帐户下 运行 。管理员用户(默认的 macOS 帐户是一个)可以随时更改文件夹所有权和权限,因此您不会阻止 来自曾经的文件夹正在访问。
我们希望阻止用户通过以下方式访问我们从非沙盒应用创建的目录:
FileManager.createDirectory(atPath:withIntermediateDirectories:attributes:) //where path is ~/Library/Application Support/our.bundle.identifier/ourdir
为此,我们没有为此目录设置任何权限,从而确保他们无法通过以下方式打开它:
fileManager.setAttributes([.posixPermissions: 00000], ofItemAtPath: path) //no permissions
但是,用户只需右键单击它,选择“获取信息”,然后将其从“所有人都无法访问”更改为“读取和写入”即可获得访问权限。
但我发现的其他目录并非如此。例如,位于 /Users/Guest/
的桌面(或您未登录的任何其他用户帐户)也对每个人都没有访问权限,当您尝试更改它时,您会收到错误消息:
The operation can’t be completed because you don’t have the necessary permission.
我看到的另一个区别是该目录禁用了锁定复选框,但我们的应用程序创建的目录启用了该复选框。
这正是我们应用创建的目录所需要的。如何确保用户没有权限更改此目录的权限?
无法访问某些文件夹的原因是它们归不同用户所有,而登录用户没有权限。但是你的应用程序也不会,因为它在用户帐户下 运行 。管理员用户(默认的 macOS 帐户是一个)可以随时更改文件夹所有权和权限,因此您不会阻止 来自曾经的文件夹正在访问。