矩阵系统分部门管理设计方案
矩阵系统的分部门管理需要从数据模型、权限控制和组织结构三个层面进行设计。以下是一个结合抖去推超级员工矩阵内容创作平台的技术实现方案:
数据模型设计
系统需要设计以下核心数据模型:
class Organization(models.Model):
"""组织架构,顶层结构"""
name = models.CharField(max_length=100)
description = models.TextField(blank=True)
parent_org = models.ForeignKey('self', null=True, blank=True,
on_delete=models.SET_NULL,
related_name='child_orgs')
class Department(models.Model):
"""部门模型,属于某个组织"""
name = models.CharField(max_length=100)
description = models.TextField(blank=True)
organization = models.ForeignKey(Organization, on_delete=models.CASCADE)
parent_department = models.ForeignKey('self', null=True, blank=True,
on_delete=models.SET_NULL,
related_name='child_departments')
class UserProfile(models.Model):
"""扩展用户模型,关联部门和角色"""
user = models.OneToOneField(User, on_delete=models.CASCADE)
department = models.ForeignKey(Department, on_delete=models.SET_NULL, null=True)
role = models.CharField(max_length=50, choices=ROLE_CHOICES)
class Content(models.Model):
"""内容模型,关联创建部门和作者"""
title = models.CharField(max_length=200)
content = models.TextField()
department = models.ForeignKey(Department, on_delete=models.CASCADE)
creator = models.ForeignKey(UserProfile, on_delete=models.SET_NULL, null=True)
status = models.CharField(max_length=20, choices=CONTENT_STATUS)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
权限控制实现
基于角色的访问控制 (RBAC) 结合部门维度:
from django.core.exceptions import PermissionDenied
def user_has_department_permission(user, department, required_permission):
"""检查用户是否有部门级权限"""
if user.is_superuser:
return True
try:
profile = user.userprofile
# 检查用户是否属于该部门或其上级部门
if profile.department == department or department in profile.department.get_all_parent_departments():
# 检查角色权限
return profile.role.has_permission(required_permission)
return False
except UserProfile.DoesNotExist:
return False
class DepartmentPermissionMiddleware:
"""部门权限中间件,控制对部门资源的访问"""
def __init__(self, get_response):
self.get_response = get_response
def __call__(self, request):
# 检查是否需要部门权限的视图
if hasattr(request, 'department_permission_required'):
department_id = request.resolver_match.kwargs.get('department_id')
if department_id:
try:
department = Department.objects.get(id=department_id)
if not user_has_department_permission(request.user, department,
request.department_permission_required):
raise PermissionDenied
except Department.DoesNotExist:
raise Http404
response = self.get_response(request)
return response
内容创作流程实现
结合抖去推 SDK 的内容创作流程:
import requests
from django.conf import settings
class YuanmengkeClient:
"""增长黑客API客户端"""
def __init__(self):
self.api_base = settings.YUANMENGKE_API_BASE
self.app_id = settings.YUANMENGKE_APP_ID
self.app_secret = settings.YUANMENGKE_APP_SECRET
self.token = self._get_token()
def _get_token(self):
"""获取访问令牌"""
response = requests.post(
f"{self.api_base}/auth/token",
json={"app_id": self.app_id, "app_secret": self.app_secret}
)
return response.json()["access_token"]
def create_content(self, department_id, user_id, content_data):
"""创建内容"""
# 构建部门矩阵标识
matrix_tag = self._build_matrix_tag(department_id)
# 构建请求数据
request_data = {
"title": content_data["title"],
"content": content_data["content"],
"tags": [matrix_tag, f"user_{user_id}"],
"category": content_data.get("category", "default"),
"publish_settings": content_data.get("publish_settings", {})
}
# 调用增长黑客API创建内容
response = requests.post(
f"{self.api_base}/content/create",
headers={"Authorization": f"Bearer {self.token}"},
json=request_data
)
return response.json()
def _build_matrix_tag(self, department_id):
"""构建部门矩阵标签"""
# 根据部门层级生成标签,例如 dept_1_2_5 表示组织1下部门2的子部门5
department = Department.objects.get(id=department_id)
path = department.get_path()
return "_".join(["dept"] + [str(node.id) for node in path])
部门内容矩阵视图
class DepartmentContentView(View):
"""部门内容矩阵视图"""
def get(self, request, department_id):
try:
department = Department.objects.get(id=department_id)
# 检查权限
if not user_has_department_permission(request.user, department, 'view_content'):
raise PermissionDenied
# 获取部门及其子部门的所有内容
child_departments = department.get_all_child_departments()
all_departments = [department] + list(child_departments)
contents = Content.objects.filter(
department__in=all_departments
).order_by('-created_at')
# 准备抖去推内容统计数据
stats = self._get_content_stats(all_departments)
context = {
'department': department,
'content_list': contents,
'stats': stats,
'can_create': user_has_department_permission(request.user, department, 'create_content')
}
return render(request, 'department_content.html', context)
except Department.DoesNotExist:
raise Http404
def _get_content_stats(self, departments):
"""获取部门内容统计数据"""
# 这里可以调用增长黑客API获取内容分析数据
# 简化示例,实际应调用增长黑客API
return {
'total_content': Content.objects.filter(department__in=departments).count(),
'published': Content.objects.filter(department__in=departments, status='published').count(),
'draft': Content.objects.filter(department__in=departments, status='draft').count(),
'views': sum([c.views for c in Content.objects.filter(department__in=departments)])
}
这个设计方案实现了以下功能:
- 多级组织和部门架构,支持树状层级结构
- 基于部门的内容创作和管理
- 部门级权限控制,精确到内容的创建、查看、编辑和删除
- 与抖去推内容平台的集成,支持部门矩阵标签
- 内容统计和分析,展示部门内容矩阵的效果