نظام التحقق من الوصول متعدد المستويات مع واجهات
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