Tantangan
Diberikan string yang menunjukkan notasi simbolis izin UNIX file dan kepemilikannya (ID pengguna dan ID grup), memutuskan apakah pengguna yang diberikan A
memiliki izin untuk membaca / menulis / menjalankannya.
Terkait .
Izin dalam sistem UNIX
Di UNIX, setiap file memiliki tiga kelas izin ( pengguna , grup , dan lainnya ) dan kepemilikan, termasuk pengguna mana dan grup mana yang dimilikinya.
Notasi simbolik terdiri dari sepuluh karakter. Karakter pertama tidak penting dalam tantangan ini. Sembilan karakter tersisa dalam tiga set tiga karakter, mewakili izin pengguna, grup, dan kelas lainnya. Karakter di setiap set menunjukkan apakah membaca / menulis / mengeksekusi diizinkan. Jika diizinkan, itu akan menjadi r
, w
atau x
. Kalau tidak, itu akan terjadi -
.
Perhatikan bahwa setuid , setgid dan lengket bit dapat mengubah karakter ketiga dari setiap set untuk s
, S
, t
atau T
. Ini aturan sederhana: jika karakter huruf kecil, maka izin ditetapkan; kalau tidak, tidak.
(Untuk perincian notasi simbolis izin, silakan lihat di sini .)
Setiap pengguna memiliki ID pengguna, dan setiap grup memiliki ID grupnya. Semua ID akan berupa bilangan bulat non-negatif. Seorang pengguna akan menjadi anggota setidaknya satu grup. Jika pengguna A
ingin mendapatkan akses ke file, sistem akan memeriksa izinnya sebagai berikut:
Jika file tersebut milik pengguna
A
, periksa izin kelas pengguna .Jika file tersebut bukan milik
A
, tetapiA
milik grup yang menjadi milik file tersebut, periksa izin kelas grup .Kalau tidak, periksa izin kelas lain .
Namun, ada satu pengecualian: jika ID pengguna adalah 0 (pengguna super), mereka memiliki izin untuk melakukan apa saja !
Spesifikasi
- Program / fungsi Anda harus mengambil ini sebagai input dalam format apa pun yang masuk akal:
- Izin dalam notasi simbolis .
- ID pengguna dan ID grup yang menjadi milik file tersebut.
- ID pengguna
A
, dan daftar ID grup yangA
menjadi milik. - Jenis akses. Anda dapat menggunakan tiga nilai satu digit atau satu karakter yang berbeda untuk membaca, menulis, dan mengeksekusi.
- Kembalikan / hasilkan nilai yang benar jika
A
memiliki izin untuk mengakses file, atau nilai yang salah jika tidak. - Anda dapat mengasumsikan bahwa karakter pertama dari notasi akan selalu menjadi
-
(file biasa). - Ini kode-golf , jadi byte terpendek menang!
Uji Kasus
Format di sini adalah [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