挑战
给定一个指示文件的UNIX权限及其所有权(用户ID和组ID)的符号表示形式的字符串,请确定给定的用户是否A
具有读取/写入/执行该文件的权限。
相关的。
UNIX系统中的权限
在UNIX中,每个文件都有三类权限(user,group和others)和所有权,包括文件所属的用户和组。
符号表示法由十个字符组成。在这个挑战中,第一个角色并不重要。其余的9个字符位于三个字符集的三个集合中,分别代表用户,组和其他类的权限。每组中的字符表示是否允许读/写/执行。如果允许的话,这将是r
,w
或x
。否则,它将为-
。
注意的setuid,setgid的和粘滞位可每一组的第三个字符改变为s
,S
,t
或T
。这是一个简单的规则:如果字符是小写字母,则设置权限;否则,事实并非如此。
(有关权限的符号表示法的详细信息,请参阅此处。)
每个用户都有其用户ID,每个组都有其组ID。所有ID将为非负整数。一个用户将至少属于一个组。如果用户A
想要访问文件,则系统将按以下方式检查其权限:
如果文件属于user
A
,请检查用户类的权限。如果文件不属于
A
,但A
属于文件所属的组,请检查组类的权限。否则,请检查其他类的权限。
但是,有一个例外:如果用户ID为0(超级用户),则他们有权执行任何操作!
技术指标
- 您的程序/函数应该以任何合理的格式将它们作为输入:
- 以符号表示的权限。
- 文件所属的用户标识和组标识。
- 的用户ID
A
和A
所属的组ID列表。 - 访问类型。您可以使用任何三个不同的一位数或一个字符的值进行读取,写入和执行。
- 如果
A
有权访问文件,则返回/输出一个真实值;否则,返回/输出一个虚假值。 - 您可以假定符号的第一个字符将始终为
-
(常规文件)。 - 这是代码高尔夫球,因此最短的字节为准!
测试用例
格式为[permissions, user ID of file, group ID of file, user ID of A, group IDs of A, type(r/w/x)]
。
[-rwx------, 13, 15, 13, [15, 24], r]: True # user
[-rwxr-xr-x, 13, 24, 24, [15, 24], w]: False # group
[-rwxr-Sr-T, 13, 15, 24, [15, 35], x]: False # group
[-rwsr-xr-t, 13, 15, 24, [24, 35], x]: True # others
[----------, 13, 15, 0, [0, 1, 2], r]: True # superuser
[----------, 13, 15, 1, [0, 1, 2], r]: False # others
[----rwxrwx, 13, 15, 13, [15, 24], r]: False # user