نظام التحقق من الوصول متعدد المستويات مع واجهات

Go Hard interfaces

مهمة «نظام التحقق من الوصول متعدد المستويات مع واجهات»

قم بتنفيذ نظام التحقق من الوصول إلى الموارد باستخدام الواجهات. قم بتعريف واجهة `AccessChecker` تحتوي على الطريقتين `CheckAccess(resource string, user string) bool` و `GetPermissions(resource string) []string`. قم بتنفيذ ثلاث هياكل: `AdminAccess` (يعيد دائمًا true وقائمة بجميع الصلاحيات التي تحتوي على 'admin')، `UserAccess` (يتحقق مما إذا كان المستخدم موجودًا في قائمة المستخدمين المسموح لهم للمورد ويعيد الصلاحيات التي تبدأ بـ 'user_')، `GuestAccess` (يتحقق مما إذا كان المورد موجودًا في قائمة الموارد العامة ويعيد صلاحية 'read' إذا كان متاحًا). ثم قم بتنفيذ دالة `CreateAccessChecker(accessType string, config map[string]interface{}) (AccessChecker, error)`، والتي تنشئ الكائن المناسب بناءً على سلسلة `accessType` ('admin'، 'user'، 'guest') والإعدادات. الإدخال: أولاً عدد صحيح N (1..100) — عدد الطلبات. ثم N سطرًا بالشكل: accessType resource user. بعد ذلك، سطر بالإعدادات: للإداري — سلسلة فارغة؛ للمستخدم — سلسلة بالشكل 'resource1:user1,user2;resource2:user3'؛ للضيف — سلسلة بالشكل 'resource1;resource2'. لكل طلب، أخرج 'allowed' أو 'denied'. إذا كان نوع الوصول غير معروف، أخرج 'unknown type'.

تنسيق الإدخال

N (عدد صحيح)
N سطر: accessType resource user
configuration string

تنسيق الإخراج

N سطور: 'allowed' أو 'denied' أو 'unknown type'

أمثلة

مثال 1

الإدخال
3 admin secret admin user docs alice guest public bob
الإخراج
allowed denied denied

مثال 2

الإدخال
2 admin vault eve user reports john resource1:alice,bob;resource2:charlie
الإخراج
allowed denied

مثال 3

الإدخال
1 2 3 4 5 6 7 8 9 10
الإخراج
unknown type

مثال 4

الإدخال
1 superuser root root
الإخراج
unknown type

مثال 5

الإدخال
-1 2 3 -4 5 6 -7 8 -9 10
الإخراج
unknown type
main.go