多层访问检查系统与接口
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`。之后是一行配置:对于 admin——空字符串;对于 user——格式为 'resource1:user1,user2;resource2:user3';对于 guest——格式为 'resource1;resource2'。对于每个请求,输出 'allowed' 或 'denied'。如果 accessType 未知,则输出 'unknown type'。
输入格式
N(整数)
N行:accessType resource user
配置字符串
输出格式
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