আমার কি অনুমতি আছে?


10

চ্যালেঞ্জ

কোনও ফাইলের ইউনিক্স অনুমতি এবং তার মালিকানা (ব্যবহারকারী আইডি এবং গ্রুপ আইডি) এর প্রতীকী সূচক নির্দেশিত একটি স্ট্রিং দেওয়া, কোনও প্রদত্ত ব্যবহারকারীর Aএটি পড়ার / লেখার / সম্পাদন করার অনুমতি আছে কিনা তা সিদ্ধান্ত নিন ।

সম্পর্কিত

ইউনিক্স সিস্টেমে অনুমতি

ইউএনআইএক্সে, প্রতিটি ফাইলের মধ্যে তিনটি শ্রেণীর অনুমতি ( ব্যবহারকারী , গোষ্ঠী এবং অন্যান্য ) এবং মালিকানা রয়েছে, যার মধ্যে কোন ব্যবহারকারী এবং এটি কোন গ্রুপের অন্তর্ভুক্ত।

প্রতীকী স্বরলিপিটি দশটি অক্ষর নিয়ে গঠিত। এই চ্যালেঞ্জে প্রথম চরিত্রটি গুরুত্বপূর্ণ নয়। বাকী নয়টি অক্ষর তিনটি অক্ষরের তিনটি সেটে রয়েছে, যা ব্যবহারকারী, গোষ্ঠী এবং অন্যান্য শ্রেণীর অনুমতিগুলির প্রতিনিধিত্ব করে। প্রতিটি সেট-এর অক্ষরগুলি পড়ার / লেখার / সম্পাদনের অনুমতিপ্রাপ্ত কিনা তা নির্দেশ করে। যদি অনুমতি দেওয়া হয় তবে তা হবে r, wবা x। অন্যথায়, এটি হবে -

লক্ষ্য করুন setuid , setgid এবং চটচটে বিট প্রতিটি সেট তৃতীয় চরিত্র পরিবর্তন হতে পারে s, S, tবা T। এখানে একটি সহজ নিয়ম: চরিত্রটি যদি ছোট হাতের অক্ষর হয় তবে তার অনুমতি নির্ধারণ করা হয়; অন্যথায়, এটি না।

(অনুমতিগুলির প্রতীকী স্বরলিপিগুলির বিশদগুলির জন্য, দয়া করে এখানে দেখুন ))

প্রত্যেক ব্যবহারকারীর নিজস্ব আইডি রয়েছে এবং প্রতিটি গ্রুপের গ্রুপ আইডি রয়েছে। সমস্ত আইডি অ-নেতিবাচক পূর্ণসংখ্যার হবে। একজন ব্যবহারকারী কমপক্ষে একটি গোষ্ঠীর অন্তর্ভুক্ত। যদি কোনও ব্যবহারকারী Aকোনও ফাইলে অ্যাক্সেস পেতে চান তবে সিস্টেমটি তাদের অনুমতিগুলি নীচের হিসাবে যাচাই করবে:

  • যদি ফাইলটি ব্যবহারকারীর অন্তর্ভুক্ত থাকে Aতবে ব্যবহারকারী শ্রেণীর অনুমতি চেক করুন ।

  • যদি ফাইলটি অন্তর্ভুক্ত না হয় Aতবে Aফাইলটি গ্রুপের অন্তর্ভুক্ত তবে গ্রুপ শ্রেণীর অনুমতি চেক করুন ।

  • অন্যথায়, অন্য শ্রেণীর অনুমতি পরীক্ষা করুন ।

তবে, একটি ব্যতিক্রম আছে: যদি ব্যবহারকারী আইডি 0 (সুপারইউসার) হয় তবে তাদের কিছু করার অনুমতি রয়েছে !

বিশেষ উল্লেখ

  • আপনার প্রোগ্রাম / ফাংশন এটিকে কোনও যুক্তিসঙ্গত বিন্যাসে ইনপুট হিসাবে নেওয়া উচিত:
    • প্রতীকী স্বরলিপি মধ্যে অনুমতি ।
    • ব্যবহারকারী আইডি এবং গ্রুপ আইডি যা ফাইলটি অন্তর্ভুক্ত।
    • এর ব্যবহারকারী আইডি Aএবং গ্রুপ আইডির একটি তালিকা যা Aএর সাথে সম্পর্কিত।
    • অ্যাক্সেসের ধরণ। আপনি পড়তে, লিখতে এবং সম্পাদন করতে যে কোনও তিনটি পৃথক এক-ডিজিট বা এক-বর্ণের মান ব্যবহার করতে পারেন।
  • 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

উত্তর:


6

জাভাস্ক্রিপ্ট (ES6), 61 51 50 বাইট

চ্যালেঞ্জটিতে বর্ণিত ক্রমে, ইনপুট হিসাবে 6 স্বতন্ত্র পরামিতি নেয়। আশা শেষ প্যারামিটার হতে 1জন্য পঠিত , 2জন্য লেখ বা 3জন্য চালানো । রিটার্ন 0বা 1

(p,u,g,a,G,P)=>!a|p[u-a?6-3*G.includes(g)+P:P]>'Z'

পরীক্ষার মামলা


2

পাইথন 2 , 76 70 67 63 59 58 56 55 52 49 48 বাইট

lambda p,u,g,A,G,t:A*'_'<p[~(u==A)*3*(g in G)-t]

এটি অনলাইন চেষ্টা করুন!

3পড়ার 2জন্য, লেখার 1জন্য এবং সম্পাদনের জন্য টাইপ করে



1
গ্রুপ আইডি 0 পাওয়ার জন্য সুপারভাইজার হওয়ার দরকার নেই I আমি এটি পরীক্ষার ক্ষেত্রে যুক্ত করেছি।
কোলেরা সু

@ কলেরাসু আমি কি ভুল লিখছি, ব্যবহারকারী আইডি নেতিবাচক হতে পারে?
টিফিল্ড

ইউআইডি এবং জিআইডি উভয়ই অ-নেতিবাচক হবে।
কলেরা সু


1

পাইথ, 22 21 বাইট

|!Q}@@c3tw*nEQ-2}EEEG

এটি অনলাইনে চেষ্টা করুন। পরীক্ষা স্যুট.

ছয় লাইন হিসাবে ইনপুট নেয়:

user id
permissions
file user id
file group
user groups
permission (0 = read, 1 = write, 2 = execute)

ব্যাখ্যা

|!Q}@@c3tw*nEQ-2}EEEG     Implicit: read user id to Q
 !Q                       True if user id is 0, false otherwise
|                         If true, just return it
         w                Read permission string
        -                 Omit first -
      c3                  Split in 3 parts
            E             Read file user id
           n Q            See if it doesn't equal Q
                          -> False (0) if user matches, true (1) otherwise
                 E        Read file group
                  E       Read user groups
                }         -> True (1) if group matches, false (0) otherwise
              -2          Subtract from 2
                          -> 1 if group matches, 2 otherwise
          *               Multiply the two numbers
                          -> 0 if user matches, 1 if group matches, 2 otherwise
     @                    Take correct part of permission string
    @                     Take correct character of that part
   }                G     See if it is in lowercase alphabet
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.