You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

23 lines
919 B

from agentscope.agent import AgentBase
from agentscope.message import Msg
def create_rbac_pre_reply_hook(user_context: dict):
async def rbac_pre_reply_hook(self: AgentBase, kwargs: dict) -> dict:
msg = kwargs.get("msg")
if msg and isinstance(msg, Msg):
msg.metadata = msg.metadata or {}
msg.metadata["_user_id"] = user_context["user_id"]
msg.metadata["_role"] = user_context.get("role", "employee")
msg.metadata["_department_id"] = user_context.get("department_id", "")
msg.metadata["_data_scope"] = user_context.get("data_scope", "self_only")
return kwargs
return rbac_pre_reply_hook
def register_rbac_hooks_for_user(agent: AgentBase, user_context: dict):
hook = create_rbac_pre_reply_hook(user_context)
hook_name = f"rbac_{user_context['user_id']}"
agent.register_instance_hook("pre_reply", hook_name, hook)