本文目录导读:

我来帮你写一个简易的权限分配脚本,包含几种常见实现方式:
基于位运算的权限系统(最简洁)
# 定义权限常量
READ = 1 # 0001
WRITE = 2 # 0010
EXECUTE = 4 # 0100
DELETE = 8 # 1000
class PermissionManager:
def __init__(self):
self.permissions = 0
def add_permission(self, perm):
"""添加权限"""
self.permissions |= perm
def remove_permission(self, perm):
"""移除权限"""
self.permissions &= ~perm
def has_permission(self, perm):
"""检查是否有某个权限"""
return (self.permissions & perm) == perm
def get_permissions(self):
"""获取所有权限"""
perms = []
if self.has_permission(READ):
perms.append("READ")
if self.has_permission(WRITE):
perms.append("WRITE")
if self.has_permission(EXECUTE):
perms.append("EXECUTE")
if self.has_permission(DELETE):
perms.append("DELETE")
return perms
# 使用示例
pm = PermissionManager()
pm.add_permission(READ | WRITE) # 添加读和写权限
print(pm.has_permission(READ)) # True
print(pm.get_permissions()) # ['READ', 'WRITE']
JSON配置式权限分配
import json
class SimplePermissionSystem:
def __init__(self, config_file=None):
self.users = {}
self.roles = {
"admin": ["read", "write", "delete", "execute"],
"editor": ["read", "write"],
"viewer": ["read"]
}
if config_file:
self.load_config(config_file)
def assign_role(self, username, role):
"""为用户分配角色"""
if role not in self.roles:
return False
if username not in self.users:
self.users[username] = {}
self.users[username]["role"] = role
self.users[username]["permissions"] = self.roles[role]
return True
def check_permission(self, username, permission):
"""检查用户是否有某个权限"""
user = self.users.get(username)
if not user:
return False
return permission in user["permissions"]
def save_config(self, filename):
"""保存配置"""
config = {
"users": self.users,
"roles": self.roles
}
with open(filename, 'w') as f:
json.dump(config, f, indent=2)
def load_config(self, filename):
"""加载配置"""
with open(filename, 'r') as f:
config = json.load(f)
self.users = config["users"]
self.roles = config["roles"]
# 使用示例
ps = SimplePermissionSystem()
ps.assign_role("张三", "editor")
print(ps.check_permission("张三", "write")) # True
print(ps.check_permission("张三", "delete")) # False
数据库式权限管理
from dataclasses import dataclass
from typing import Dict, List, Set
@dataclass
class User:
name: str
role: str
@dataclass
class Resource:
name: str
owner: str
class ACLPermissionSystem:
def __init__(self):
self.users: Dict[str, User] = {}
self.resources: Dict[str, Resource] = {}
self.acl: Dict[str, Dict[str, Set[str]]] = {}
# acl[resource_name][username] = {"read", "write", ...}
# 默认角色权限
self.role_permissions = {
"admin": {"read", "write", "delete", "manage"},
"user": {"read", "write"},
"guest": {"read"}
}
def add_user(self, name: str, role: str = "user"):
"""添加用户"""
self.users[name] = User(name=name, role=role)
def add_resource(self, name: str, owner: str):
"""添加资源"""
self.resources[name] = Resource(name=name, owner=owner)
# 资源拥有者获得所有权限
self.assign_permission(name, owner, {"read", "write", "delete"})
def assign_permission(self, resource: str, user: str, permissions: Set[str]):
"""为用户分配资源权限"""
if resource not in self.acl:
self.acl[resource] = {}
if user not in self.acl[resource]:
self.acl[resource][user] = set()
self.acl[resource][user].update(permissions)
def check_access(self, user: str, resource: str, permission: str) -> bool:
"""检查用户是否有某个资源的权限"""
# 检查用户是否存在
if user not in self.users:
return False
# 管理员拥有所有权限
if self.users[user].role == "admin":
return True
# 检查ACL
if resource in self.acl and user in self.acl[resource]:
if permission in self.acl[resource][user]:
return True
return False
def batch_assign(self, resource: str, users: List[str], permissions: Set[str]):
"""批量分配权限"""
for user in users:
if user in self.users:
self.assign_permission(resource, user, permissions)
# 使用示例
acl_system = ACLPermissionSystem()
acl_system.add_user("Alice", "admin")
acl_system.add_user("Bob", "user")
acl_system.add_resource("file1.txt", "Bob")
print(acl_system.check_access("Alice", "file1.txt", "read")) # True (admin)
print(acl_system.check_access("Bob", "file1.txt", "write")) # True (owner)
命令行工具版
import argparse
import json
class CmdPermissionTool:
def __init__(self):
self.data = {"users": {}, "roles": {}}
def add_role(self, name, permissions):
self.data["roles"][name] = permissions
def add_user(self, name, role):
if role in self.data["roles"]:
self.data["users"][name] = {
"role": role,
"permissions": self.data["roles"][role]
}
return True
return False
def check(self, user, permission):
if user in self.data["users"]:
return permission in self.data["users"][user]["permissions"]
return False
def run_cli(self):
"""命令行交互"""
parser = argparse.ArgumentParser(description='简易权限管理系统')
parser.add_argument('action', choices=['add_user', 'add_role', 'check', 'list'])
parser.add_argument('--user', help='用户名')
parser.add_argument('--role', help='角色')
parser.add_argument('--perm', help='权限')
parser.add_argument('--perms', nargs='+', help='权限列表')
args = parser.parse_args()
if args.action == 'add_role':
if args.role and args.perms:
self.add_role(args.role, args.perms)
print(f"角色 {args.role} 创建成功,权限: {args.perms}")
elif args.action == 'add_user':
if args.user and args.role:
if self.add_user(args.user, args.role):
print(f"用户 {args.user} 分配角色 {args.role} 成功")
else:
print("角色不存在")
elif args.action == 'check':
if args.user and args.perm:
result = self.check(args.user, args.perm)
print(f"用户 {args.user} {'有' if result else '没有'} {args.perm} 权限")
elif args.action == 'list':
print(json.dumps(self.data, indent=2))
# 使用示例
if __name__ == "__main__":
tool = CmdPermissionTool()
# 命令行调用:python script.py add_role --role admin --perms read write delete
tool.run_cli()
使用建议
-
选择合适的方案:
- 简单应用:用位运算方案
- 配置文件管理:用JSON方案
- 复杂系统:用数据库方案
- 命令行工具:用argparse方案
-
扩展建议:
- 添加数据库持久化
- 增加权限组继承
- 实现权限审计日志
- 添加树形资源权限
根据你的具体需求选择最合适的方案,需要更多功能或改进可以告诉我!
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播