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.exceptions import UserNotFoundError, GroupNotFoundError
from cognee.modules.users import get_user_db 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: def get_permissions_router() -> APIRouter:
permissions_router = APIRouter() permissions_router = APIRouter()
@permissions_router.post("/groups/{group_id}/permissions") @permissions_router.post("/groups/{group_id}/permissions")
async def give_permission_to_group(group_id: str, permission: str, db: Session = Depends(get_user_db)): 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: if not group:
raise GroupNotFoundError 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: if not permission_entity:
permission = Permission(name = permission) stmt = insert(Permission).values(name=permission)
db.add(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"}) 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 # Add association directly to the association table
stmt = insert(UserGroup).values(user_id=user_id, group_id=group_id) stmt = insert(UserGroup).values(user_id=user_id, group_id=group_id)
await db.session.execute(stmt) await db.session.execute(stmt)
#user.groups.append(group)
await db.session.commit() 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 .User import User
from .Group import Group from .Group import Group
from .UserGroup import UserGroup from .UserGroup import UserGroup
from .GroupPermission import GroupPermission
from .Resource import Resource from .Resource import Resource
from .Permission import Permission from .Permission import Permission
from .ACL import ACL from .ACL import ACL