チャレンジ
ファイルのUNIXパーミッションとその所有権(ユーザーIDとグループID)の記号表記を示す文字列を指定しA
て、特定のユーザーがファイルの読み取り/書き込み/実行のパーミッションを持っているかどうかを判断します。
関連。
UNIXシステムでの権限
UNIXでは、すべてのファイルは、パーミッション(3つのクラスがあるユーザー、グループ、および他のどのグループには属しているユーザーを含む)と所有権を、。
記号表記は10文字で構成されます。この課題では、最初のキャラクターは重要ではありません。残りの9文字は、3つの文字の3つのセットに含まれ、ユーザー、グループ、その他のクラスの権限を表します。各セットの文字は、読み取り/書き込み/実行が許可されているかどうかを示します。許可されている場合はr
、w
またはになりx
ます。それ以外の場合はになります-
。
そのノートのsetuid、setgidの及びスティッキービットは、各セットの3番目の文字を変更することができるs
、S
、t
またはT
。単純なルールは次のとおりです。文字が小文字の場合、権限が設定されます。そうでなければ、そうではありません。
(権限の記号表記の詳細については、こちらを参照してください。)
すべてのユーザーにはユーザーIDがあり、すべてのグループにはグループIDがあります。すべてのIDは負でない整数になります。ユーザーは少なくとも1つのグループに属します。ユーザーA
がファイルへのアクセスを取得したい場合、システムは次のようにユーザーの権限を確認します。
ファイルがuser
A
に属している場合は、userクラスの権限を確認してください。ファイルがに属していないが、ファイル
A
がA
属するグループに属している場合は、グループクラスの権限を確認してください。それ以外の場合は、他のクラスの権限を確認してください。
ただし、例外が1つあります。ユーザーIDが0(スーパーユーザー)の場合、ユーザーは何でも実行する権限を持っています。
仕様書
- プログラム/関数は、これらを適切な形式の入力として受け取る必要があります。
- 記号表記のアクセス許可。
- ファイルが属するユーザーIDとグループID。
- のユーザーID
A
、およびA
所属するグループIDのリスト。 - アクセスのタイプ。読み取り、書き込み、実行には、3つの異なる1桁または1文字の値を使用できます。
A
ファイルへのアクセス権限がある場合は真の値を返し、そうでない場合は偽の値を返す/出力します。- 表記の最初の文字は常に
-
(通常のファイル)であると想定できます。 - これはcode-golfなので、バイト単位での最短が勝ちます!
テストケース
ここのフォーマットは[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