Files
d3i-szct/paste-framework/paste/rbac/rbac_role.py
T

64 lines
2.0 KiB
Python

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