Merge commit '47296980495f8bbfc9493e93de85dd62de6fa6b9' as 'paste-framework'

This commit is contained in:
zwf
2026-06-02 19:09:22 +08:00
107 changed files with 21484 additions and 0 deletions
+63
View File
@@ -0,0 +1,63 @@
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