fix: Resolve issue with adding permissions to groups

Resolve issue with adding permissions to groups

Fix COG-656
This commit is contained in:
Igor Ilic 2024-12-13 12:37:01 +01:00
parent eddfc17861
commit b8ba436dba
3 changed files with 25 additions and 9 deletions

View file

@ -6,27 +6,32 @@ from sqlalchemy import insert
from cognee.modules.users.exceptions import UserNotFoundError, GroupNotFoundError
from cognee.modules.users import get_user_db
from cognee.modules.users.models import User, Group, Permission, UserGroup
from cognee.modules.users.models import User, Group, Permission, UserGroup, GroupPermission
def get_permissions_router() -> APIRouter:
permissions_router = APIRouter()
@permissions_router.post("/groups/{group_id}/permissions")
async def give_permission_to_group(group_id: str, permission: str, db: Session = Depends(get_user_db)):
group = db.query(Group).filter(Group.id == group_id).first()
group = (await db.session.execute(select(Group).where(Group.id == group_id))).scalars().first()
if not group:
raise GroupNotFoundError
permission = db.query(Permission).filter(Permission.name == permission).first()
permission_entity = (
await db.session.execute(select(Permission).where(Permission.name == permission))).scalars().first()
if not permission:
permission = Permission(name = permission)
db.add(permission)
if not permission_entity:
stmt = insert(Permission).values(name=permission)
ret_val = await db.session.execute(stmt)
group.permissions.append(permission)
permission_entity = (
await db.session.execute(select(Permission).where(Permission.name == permission))).scalars().first()
db.commit()
# add permission to group
await db.session.execute(insert(GroupPermission).values(group_id=group.id, permission_id=permission_entity.id))
await db.session.commit()
return JSONResponse(status_code = 200, content = {"message": "Permission assigned to group"})
@ -43,7 +48,6 @@ def get_permissions_router() -> APIRouter:
# Add association directly to the association table
stmt = insert(UserGroup).values(user_id=user_id, group_id=group_id)
await db.session.execute(stmt)
#user.groups.append(group)
await db.session.commit()

View file

@ -0,0 +1,11 @@
from datetime import datetime, timezone
from sqlalchemy import Column, ForeignKey, DateTime, UUID
from cognee.infrastructure.databases.relational import Base
class GroupPermission(Base):
__tablename__ = "group_permissions"
created_at = Column(DateTime(timezone = True), default = lambda: datetime.now(timezone.utc))
group_id = Column(UUID, ForeignKey("groups.id"), primary_key = True)
permission_id = Column(UUID, ForeignKey("permissions.id"), primary_key = True)

View file

@ -1,6 +1,7 @@
from .User import User
from .Group import Group
from .UserGroup import UserGroup
from .GroupPermission import GroupPermission
from .Resource import Resource
from .Permission import Permission
from .ACL import ACL