from sqlalchemy import delete from paste.rbac.rbac_item import RbacItem class RbacRole(RbacItem): """ 角色。 是一系列关联角色或权限的组合。可以包含权限,也可以包含其他角色。 """ @classmethod async def create(cls, name: str, description: str = None, rule_name: str = None): """ 创建角色。 :param name: 角色名称 :param description: 角色描述 :param rule_name: 规则名称 :return: 角色对象 """ assert name not in ('', None), '必须提供角色名称.' _role = cls(name=name, description=description, type=cls.TYPE_ROLE) _role.rule_name = rule_name if rule_name else _role.rule_name await _role.async_save() return _role @classmethod async def delete(cls, name: str): """ 删除角色。 :param name: 授权项名称 :return: 操作状态,游标返回对象 """ assert name not in ('', None), '必须提供角色名称.' _query = delete(cls).where(cls.name == name) _result = await cls.raw_execute(query=_query) _rowcount = _result.rowcount if isinstance(_result.rowcount, int) else 0 return _rowcount > 0, _result @classmethod async def modify(cls, name: str, description: str = None, rule_name: str = None): """ 编辑角色。 :param name: 角色名称 :param description: 描述 :param rule_name: 规则名称 :return: 角色对象 """ assert name not in ('', None), '必须提供角色名称.' _role: cls = await cls(name=name).async_find_first() assert _role, f"未找到名称为:{name} 的角色." _role.description = description if description else _role.description _role.rule_name = rule_name if rule_name else _role.rule_name await _role.async_save() return _role def __init__(self, **kwargs): super().__init__(**kwargs) self.type = self.TYPE_ROLE