Index: src/main/java/com/db/finki/www/build_board/controller/thread_controller/ProjectController.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/controller/thread_controller/ProjectController.java	(revision becf9bfe9c849e851f1a6eca11e29a68f4fbfd22)
+++ src/main/java/com/db/finki/www/build_board/controller/thread_controller/ProjectController.java	(revision c19fe86cc2983836dcb157fee711e97b793ba974)
@@ -1,13 +1,9 @@
 package com.db.finki.www.build_board.controller.thread_controller;
 
-import com.db.finki.www.build_board.common.enums.ProjectResourcePermissionOverrideType;
 import com.db.finki.www.build_board.dto.AddRoleDTO;
 import com.db.finki.www.build_board.dto.DeveloperWithRolesForProjectDTO;
-import com.db.finki.www.build_board.entity.access_managment.ProjectResource;
 import com.db.finki.www.build_board.entity.access_managment.ProjectRole;
 import com.db.finki.www.build_board.entity.access_managment.ProjectRolePermission;
-import com.db.finki.www.build_board.entity.access_managment.ProjectRolePermissionResourceOverride;
 import com.db.finki.www.build_board.entity.channel.Channel;
-import com.db.finki.www.build_board.entity.compositeId.ProjectRoleId;
 import com.db.finki.www.build_board.entity.thread.Project;
 import com.db.finki.www.build_board.entity.user_type.BBUser;
@@ -30,6 +26,4 @@
 
 import java.util.*;
-import java.util.function.Function;
-import java.util.stream.Collectors;
 
 
@@ -123,9 +117,9 @@
     }
 
-    @GetMapping("{title}/roles/{roleName}/edit")
-    public String getEditRolePage(@PathVariable(name = "title") Project project, @PathVariable(name = "roleName") String roleName, Model model) {
-        ProjectRole projectRole = projectRoleRepository.findById(new ProjectRoleId(roleName,project)).orElseThrow(() -> new IllegalArgumentException("bad project id or role name"));
-        List<ProjectRolePermission> projectRolePermissions = projectAccessManagementService.getRolePermissionsForRole(roleName,project);
-        List<RoleChannelPermissions> roleChannelPermissions = channelService.getRoleChannelPermissions(roleName,project.getId());
+    @GetMapping("{title}/roles/{id}/edit")
+    public String getEditRolePage(@PathVariable(name = "title") Project project, @PathVariable(name = "id") Integer roleId,Model model) {
+        ProjectRole projectRole = projectRoleRepository.findById(roleId).orElseThrow(() -> new IllegalArgumentException("bad project id or role name"));
+        List<ProjectRolePermission> projectRolePermissions = projectAccessManagementService.getRolePermissionsForRoleInProject(projectRole);
+        List<RoleChannelPermissions> roleChannelPermissions = channelService.getChannelPermissionsForRole(projectRole);
         List<Channel> channels = channelService.getAllChannelsForProject(project);
         List<String> selectedGlobalPermissions = projectRolePermissions
@@ -134,7 +128,6 @@
 
 
-        model.addAttribute("roleName",roleName);
+        model.addAttribute("role",projectRole);
         model.addAttribute("overrideType",projectRole.getOverrideType().toString());
-        model.addAttribute("project",project);
         model.addAttribute("globalPermissions", List.of("CREATE", "DELETE"));
         model.addAttribute("perResourcePermissions", List.of("READ", "WRITE"));
@@ -144,15 +137,22 @@
         return "project_pages/edit-role";
 
-
-
+    }
+
+    @PostMapping("{title}/roles/{id}/edit")
+    public String editRole(@PathVariable(name = "title") Project project, @PathVariable(name = "id") Integer roleId,@RequestBody AddRoleDTO addRoleDTO) {
+        projectAccessManagementService.updateRole(roleId, mapper.map(addRoleDTO));
+
+        return "redirect:/projects/" + project.getId() + "/roles";
     }
 
     //projects/Project 1 Thread/roles/Admin/delete
-    @PostMapping("{project_title}/roles/{role_name}/delete")
+    @PostMapping("{project_title}/roles/{id}/delete")
     public String deleteRole(
             @PathVariable(name = "project_title") Project project,
-            @PathVariable(name = "role_name") String roleName
+            @PathVariable(name = "id") Integer id
                             ){
-        projectAccessManagementService.deleteByRoleNameAndProjectTitle(project,roleName);
+
+        ProjectRole role = projectRoleRepository.findById(id).orElseThrow(() -> new IllegalArgumentException("bad project id or role name"));
+        projectAccessManagementService.deleteRole(role);
         return String.format("redirect:/projects/%s/roles", project.getTitle());
     }
@@ -269,5 +269,6 @@
     public String assignRolesToUser(@PathVariable(name = "title") @P("project") Project project, @PathVariable Integer userId,@RequestParam(name = "roles") List<String> roleNames){
         BBUser user = userDetailsService.loadUserById(userId);
-        projectAccessManagementService.addRolesToUser(user,project,roleNames);
+        List<ProjectRole> roles = projectRoleRepository.findAllByNameInAndProject(roleNames,project);
+        projectAccessManagementService.addRolesToUser(user,roles);
         return "redirect:/projects/" + project.getTitle() + "/members";
     }
Index: src/main/java/com/db/finki/www/build_board/entity/access_managment/ProjectRole.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/entity/access_managment/ProjectRole.java	(revision becf9bfe9c849e851f1a6eca11e29a68f4fbfd22)
+++ src/main/java/com/db/finki/www/build_board/entity/access_managment/ProjectRole.java	(revision c19fe86cc2983836dcb157fee711e97b793ba974)
@@ -2,8 +2,9 @@
 
 import com.db.finki.www.build_board.common.enums.ProjectResourcePermissionOverrideType;
-import com.db.finki.www.build_board.entity.compositeId.ProjectRoleId;
 import com.db.finki.www.build_board.entity.thread.Project;
 import jakarta.persistence.*;
 import lombok.*;
+
+import java.util.Objects;
 
 @Table(name = "project_role")
@@ -15,19 +16,25 @@
 @ToString
 public class ProjectRole {
-    @EmbeddedId
-    private ProjectRoleId id;
+    @Id
+    @GeneratedValue(strategy = GenerationType.SEQUENCE,generator = "project_role_id_gen")
+    @SequenceGenerator(name = "project_role_id_gen",sequenceName = "project_role_id_seq",allocationSize=1)
+    private Integer id;
+    String name;
+    @ManyToOne
+    @JoinColumn(name = "project_id",referencedColumnName = "id")
+    Project project;
     @Column(name = "override_type",nullable = false)
     private String overrideType = "EXCLUDE";
 
-    public ProjectRole(ProjectRoleId id) {
-        this.id = id;
+    public ProjectRole(Project project, String name) {
+        this.project = project;
+        this.name = name;
+    }
+    public ProjectRole(Project project, String name, String overrideType) {
+        this.project = project;
+        this.name = name;
+        this.overrideType = overrideType;
     }
 
-    public String getName(){
-        return id.getName();
-    }
-    public Project getProject(){
-        return id.getProject();
-    }
     public ProjectResourcePermissionOverrideType getOverrideType() {
         return overrideType.equals(ProjectResourcePermissionOverrideType.INCLUDE.name()) ?
@@ -35,3 +42,15 @@
                 : ProjectResourcePermissionOverrideType.EXCLUDE;
     }
+
+    @Override
+    public boolean equals(Object o) {
+        if (o == null || getClass() != o.getClass()) return false;
+        ProjectRole that = (ProjectRole) o;
+        return Objects.equals(name, that.name) && Objects.equals(project, that.project);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hash(name, project);
+    }
 }
Index: src/main/java/com/db/finki/www/build_board/entity/access_managment/ProjectRolePermission.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/entity/access_managment/ProjectRolePermission.java	(revision becf9bfe9c849e851f1a6eca11e29a68f4fbfd22)
+++ src/main/java/com/db/finki/www/build_board/entity/access_managment/ProjectRolePermission.java	(revision c19fe86cc2983836dcb157fee711e97b793ba974)
@@ -1,11 +1,8 @@
 package com.db.finki.www.build_board.entity.access_managment;
 
-import com.db.finki.www.build_board.common.enums.ProjectResourcePermissionOverrideType;
 import com.db.finki.www.build_board.entity.compositeId.ProjectRolePermissionId;
-import jakarta.persistence.Column;
 import jakarta.persistence.EmbeddedId;
 import jakarta.persistence.Entity;
 import jakarta.persistence.Table;
-import lombok.AllArgsConstructor;
 import lombok.Getter;
 import lombok.NoArgsConstructor;
@@ -30,5 +27,5 @@
 
     public ProjectRole getProjectRole() {
-        return id.getProjectRole();
+        return id.getRole();
     }
 
Index: src/main/java/com/db/finki/www/build_board/entity/compositeId/ProjectRoleId.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/entity/compositeId/ProjectRoleId.java	(revision becf9bfe9c849e851f1a6eca11e29a68f4fbfd22)
+++ src/main/java/com/db/finki/www/build_board/entity/compositeId/ProjectRoleId.java	(revision c19fe86cc2983836dcb157fee711e97b793ba974)
@@ -5,14 +5,2 @@
 import lombok.*;
 
-@Getter
-@Setter
-@Embeddable
-@AllArgsConstructor
-@NoArgsConstructor
-@ToString
-public class ProjectRoleId {
-    String name;
-    @ManyToOne
-    @JoinColumn(name = "project_id",referencedColumnName = "id")
-    Project project;
-}
Index: src/main/java/com/db/finki/www/build_board/entity/compositeId/ProjectRolePermissionId.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/entity/compositeId/ProjectRolePermissionId.java	(revision becf9bfe9c849e851f1a6eca11e29a68f4fbfd22)
+++ src/main/java/com/db/finki/www/build_board/entity/compositeId/ProjectRolePermissionId.java	(revision c19fe86cc2983836dcb157fee711e97b793ba974)
@@ -26,9 +26,6 @@
 
     @ManyToOne
-    @JoinColumns({
-            @JoinColumn(name = "role_name", referencedColumnName = "name"),
-            @JoinColumn(name = "project_id", referencedColumnName = "project_id")
-    })
-    private ProjectRole projectRole;
+    @JoinColumn(name = "role_id", referencedColumnName = "id")
+    private ProjectRole role;
 
 
@@ -38,10 +35,10 @@
         if (!(o instanceof ProjectRolePermissionId that)) return false;
         return Objects.equals(permission, that.permission) &&
-                Objects.equals(projectRole, that.projectRole);
+                Objects.equals(role, that.role);
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(permission, projectRole);
+        return Objects.hash(permission, role);
     }
 }
Index: src/main/java/com/db/finki/www/build_board/entity/compositeId/ProjectRolePermissionResourceOverrideId.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/entity/compositeId/ProjectRolePermissionResourceOverrideId.java	(revision becf9bfe9c849e851f1a6eca11e29a68f4fbfd22)
+++ src/main/java/com/db/finki/www/build_board/entity/compositeId/ProjectRolePermissionResourceOverrideId.java	(revision c19fe86cc2983836dcb157fee711e97b793ba974)
@@ -19,6 +19,5 @@
     @ManyToOne(optional = false)
     @JoinColumns({
-            @JoinColumn(name = "role_name",referencedColumnName = "role_name"),
-            @JoinColumn(name = "project_id",referencedColumnName = "project_id"),
+            @JoinColumn(name = "role_id",referencedColumnName = "role_id"),
             @JoinColumn(name = "permission_name",referencedColumnName = "permission_name")
     })
Index: src/main/java/com/db/finki/www/build_board/entity/compositeId/UsersProjectRolesId.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/entity/compositeId/UsersProjectRolesId.java	(revision becf9bfe9c849e851f1a6eca11e29a68f4fbfd22)
+++ src/main/java/com/db/finki/www/build_board/entity/compositeId/UsersProjectRolesId.java	(revision c19fe86cc2983836dcb157fee711e97b793ba974)
@@ -19,11 +19,8 @@
 public class UsersProjectRolesId {
     @ManyToOne
-    @JoinColumns({
-            @JoinColumn(name = "project_id", referencedColumnName = "project_id"),
-            @JoinColumn(name = "role_name", referencedColumnName = "name")
-    })
+    @JoinColumn(name = "role_id", referencedColumnName = "id")
     ProjectRole role;
     @ManyToOne
-    @JoinColumn(name = "user_id",referencedColumnName = "id")
+    @JoinColumn(name = "user_id", referencedColumnName = "id")
     BBUser user;
 
Index: src/main/java/com/db/finki/www/build_board/entity/view/RoleChannelPermissions.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/entity/view/RoleChannelPermissions.java	(revision becf9bfe9c849e851f1a6eca11e29a68f4fbfd22)
+++ src/main/java/com/db/finki/www/build_board/entity/view/RoleChannelPermissions.java	(revision c19fe86cc2983836dcb157fee711e97b793ba974)
@@ -1,8 +1,6 @@
 package com.db.finki.www.build_board.entity.view;
 
-import jakarta.persistence.Column;
-import jakarta.persistence.Entity;
-import jakarta.persistence.Id;
-import jakarta.persistence.Table;
+import com.db.finki.www.build_board.entity.access_managment.ProjectRole;
+import jakarta.persistence.*;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
@@ -24,10 +22,9 @@
     @Column(name = "project_resource_id")
     private Integer resourceId;
-    @Column(name = "project_id")
-    private Integer projectId;
     @Column(name = "name")
     private String channelName;
-    @Column(name = "role_name")
-    private String roleName;
+    @ManyToOne
+    @JoinColumn(name = "role_id",referencedColumnName = "id")
+    private ProjectRole role;
     @Column(name = "permissions")
     private String permissions; // comma seperated PERMISSIONS
@@ -37,10 +34,10 @@
         if (o == null || getClass() != o.getClass()) return false;
         RoleChannelPermissions that = (RoleChannelPermissions) o;
-        return Objects.equals(resourceId, that.resourceId) && Objects.equals(projectId, that.projectId) && Objects.equals(channelName, that.channelName) && Objects.equals(roleName, that.roleName) && Objects.equals(permissions, that.permissions);
+        return Objects.equals(resourceId, that.resourceId) && Objects.equals(channelName, that.channelName) && Objects.equals(role, that.role) && Objects.equals(permissions, that.permissions);
     }
 
     @Override
     public int hashCode() {
-        return Objects.hash(resourceId, projectId, channelName, roleName, permissions);
+        return Objects.hash(resourceId, channelName, role, permissions);
     }
 }
Index: c/main/java/com/db/finki/www/build_board/repository/RoleChannelPermissionsRepository.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/repository/RoleChannelPermissionsRepository.java	(revision becf9bfe9c849e851f1a6eca11e29a68f4fbfd22)
+++ 	(revision )
@@ -1,10 +1,0 @@
-package com.db.finki.www.build_board.repository;
-
-import com.db.finki.www.build_board.entity.view.RoleChannelPermissions;
-import org.springframework.data.jpa.repository.JpaRepository;
-
-import java.util.List;
-
-public interface RoleChannelPermissionsRepository extends JpaRepository<RoleChannelPermissions, Integer> {
-    List<RoleChannelPermissions> findByRoleNameAndProjectId(String roleName, Integer projectId);
-}
Index: src/main/java/com/db/finki/www/build_board/repository/access_managment/ProjectRolePermissionRepository.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/repository/access_managment/ProjectRolePermissionRepository.java	(revision becf9bfe9c849e851f1a6eca11e29a68f4fbfd22)
+++ src/main/java/com/db/finki/www/build_board/repository/access_managment/ProjectRolePermissionRepository.java	(revision c19fe86cc2983836dcb157fee711e97b793ba974)
@@ -6,4 +6,5 @@
 import com.db.finki.www.build_board.entity.thread.Project;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
@@ -13,7 +14,6 @@
 @Repository
 public interface ProjectRolePermissionRepository extends JpaRepository<ProjectRolePermission, ProjectRolePermissionId> {
-    List<ProjectRolePermission> findByIdProjectRole(ProjectRole projectRole);
-    List<ProjectRolePermission> findAllByIdProjectRole(ProjectRole projectRole);
-
-
+    List<ProjectRolePermission> findAllByIdRole(ProjectRole role);
+    @Modifying(clearAutomatically = true)
+    void deleteAllByIdRole(ProjectRole role);
 }
Index: src/main/java/com/db/finki/www/build_board/repository/access_managment/ProjectRolePermissionResourceOverrideRepository.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/repository/access_managment/ProjectRolePermissionResourceOverrideRepository.java	(revision becf9bfe9c849e851f1a6eca11e29a68f4fbfd22)
+++ src/main/java/com/db/finki/www/build_board/repository/access_managment/ProjectRolePermissionResourceOverrideRepository.java	(revision c19fe86cc2983836dcb157fee711e97b793ba974)
@@ -7,4 +7,5 @@
 import com.db.finki.www.build_board.entity.compositeId.ProjectRolePermissionResourceOverrideId;
 import org.springframework.data.jpa.repository.JpaRepository;
+import org.springframework.data.jpa.repository.Modifying;
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
@@ -22,17 +23,14 @@
                           FROM users_project_roles upr
                                    JOIN project_role pr
-                               ON pr.name = upr.role_name
-                                            AND pr.project_id = upr.project_id
+                               ON upr.role_id = pr.id
                                    JOIN role_permissions rp
-                                        ON upr.role_name = rp.role_name
-                                            AND upr.project_id = rp.project_id
+                                    ON pr.id = rp.role_id
                                    LEFT JOIN role_permissions_overrides rpo
-                                             ON rpo.role_name = rp.role_name
-                                                 AND rpo.project_id = rp.project_id
+                                             ON pr.id = rpo.role_id
                                                  AND rpo.permission_name = rp.permission_name
                                                  AND rpo.project_resource_id = :resourceId
    
                           WHERE upr.user_id = :userId
-                            AND rp.project_id = :projectId
+                            AND pr.project_id = :projectId
                             AND rp.permission_name = :permissionName
                             AND (
@@ -43,4 +41,7 @@
           """, nativeQuery = true)
     boolean hasPermissionForResource(int projectId,int userId,String permissionName,int resourceId);
-    List<ProjectRolePermissionResourceOverride> findAllByIdProjectRolePermissionIdProjectRole(ProjectRole projectRole);
+    List<ProjectRolePermissionResourceOverride> findAllByIdProjectRolePermissionIdRole(ProjectRole role);
+
+    @Modifying(clearAutomatically = true)
+    void deleteAllByIdProjectRolePermissionIdRole(ProjectRole role);
 }
Index: src/main/java/com/db/finki/www/build_board/repository/access_managment/ProjectRoleRepository.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/repository/access_managment/ProjectRoleRepository.java	(revision becf9bfe9c849e851f1a6eca11e29a68f4fbfd22)
+++ src/main/java/com/db/finki/www/build_board/repository/access_managment/ProjectRoleRepository.java	(revision c19fe86cc2983836dcb157fee711e97b793ba974)
@@ -2,5 +2,4 @@
 
 import com.db.finki.www.build_board.entity.access_managment.ProjectRole;
-import com.db.finki.www.build_board.entity.compositeId.ProjectRoleId;
 import com.db.finki.www.build_board.entity.thread.Project;
 import org.springframework.data.jpa.repository.JpaRepository;
@@ -10,7 +9,9 @@
 
 @Repository
-public interface ProjectRoleRepository  extends JpaRepository<ProjectRole, ProjectRoleId> {
-    List<ProjectRole> findByIdProject(Project project);
+public interface ProjectRoleRepository  extends JpaRepository<ProjectRole, Integer> {
+    List<ProjectRole> findByProject(Project project);
 
-    List<ProjectRole> findByIdProjectId(Integer idProjectId);
+    List<ProjectRole> findByProjectId(Integer projectId);
+
+    List<ProjectRole> findAllByNameInAndProject(List<String> roleNames,Project project);
 }
Index: src/main/java/com/db/finki/www/build_board/repository/access_managment/RoleChannelPermissionsRepository.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/repository/access_managment/RoleChannelPermissionsRepository.java	(revision c19fe86cc2983836dcb157fee711e97b793ba974)
+++ src/main/java/com/db/finki/www/build_board/repository/access_managment/RoleChannelPermissionsRepository.java	(revision c19fe86cc2983836dcb157fee711e97b793ba974)
@@ -0,0 +1,11 @@
+package com.db.finki.www.build_board.repository.access_managment;
+
+import com.db.finki.www.build_board.entity.access_managment.ProjectRole;
+import com.db.finki.www.build_board.entity.view.RoleChannelPermissions;
+import org.springframework.data.jpa.repository.JpaRepository;
+
+import java.util.List;
+
+public interface RoleChannelPermissionsRepository extends JpaRepository<RoleChannelPermissions, Integer> {
+    List<RoleChannelPermissions> findByRole(ProjectRole role);
+}
Index: src/main/java/com/db/finki/www/build_board/repository/access_managment/UserProjectRoleRepository.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/repository/access_managment/UserProjectRoleRepository.java	(revision becf9bfe9c849e851f1a6eca11e29a68f4fbfd22)
+++ src/main/java/com/db/finki/www/build_board/repository/access_managment/UserProjectRoleRepository.java	(revision c19fe86cc2983836dcb157fee711e97b793ba974)
@@ -1,9 +1,6 @@
 package com.db.finki.www.build_board.repository.access_managment;
 
-import com.db.finki.www.build_board.entity.access_managment.ProjectRole;
 import com.db.finki.www.build_board.entity.access_managment.UsersProjectRoles;
 import com.db.finki.www.build_board.entity.compositeId.UsersProjectRolesId;
-import com.db.finki.www.build_board.entity.thread.Project;
-import com.db.finki.www.build_board.entity.user_type.BBUser;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.stereotype.Repository;
@@ -13,4 +10,5 @@
 @Repository
 public interface UserProjectRoleRepository extends JpaRepository<UsersProjectRoles, UsersProjectRolesId> {
-    List<UsersProjectRoles> findByIdRoleIdProjectIdAndIdUserId(int projectId,int userId);
+    List<UsersProjectRoles> findByIdRoleProjectIdAndIdUserId(int projectId, int userId);
+    void deleteByIdRoleIdAndIdUserId(int roleId, int userId);
 }
Index: src/main/java/com/db/finki/www/build_board/service/access_managment/AddRoleDTOEntities.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/service/access_managment/AddRoleDTOEntities.java	(revision becf9bfe9c849e851f1a6eca11e29a68f4fbfd22)
+++ src/main/java/com/db/finki/www/build_board/service/access_managment/AddRoleDTOEntities.java	(revision c19fe86cc2983836dcb157fee711e97b793ba974)
@@ -15,5 +15,5 @@
     String name;
     Project project;
-    List<PermissionResourceWrapper> permissionResource;
+    List<PermissionResourceWrapper> permissionsResourceWrappers;
     List<Permission> globalPermissions;
     ProjectResourcePermissionOverrideType projectResourcePermissionOverrideType;
Index: src/main/java/com/db/finki/www/build_board/service/access_managment/AddRoleDTOEntitiesMapper.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/service/access_managment/AddRoleDTOEntitiesMapper.java	(revision becf9bfe9c849e851f1a6eca11e29a68f4fbfd22)
+++ src/main/java/com/db/finki/www/build_board/service/access_managment/AddRoleDTOEntitiesMapper.java	(revision c19fe86cc2983836dcb157fee711e97b793ba974)
@@ -39,5 +39,5 @@
         dto2.setName(dto.getName());
         dto2.setProject(findProject(dto.getProjectTitle()));
-        dto2.setPermissionResource(findPermissionResource(dto.getPermissionResourceDTOS()));
+        dto2.setPermissionsResourceWrappers(findPermissionResource(dto.getPermissionResourceDTOS()));
         dto2.setProjectResourcePermissionOverrideType(ProjectResourcePermissionOverrideType.valueOf(dto.getPermissionOverrideType()));
         dto2.setGlobalPermissions(findGlobalPermissions(dto.getGlobalPermissions()));
Index: src/main/java/com/db/finki/www/build_board/service/access_managment/ProjectAccessManagementService.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/service/access_managment/ProjectAccessManagementService.java	(revision becf9bfe9c849e851f1a6eca11e29a68f4fbfd22)
+++ src/main/java/com/db/finki/www/build_board/service/access_managment/ProjectAccessManagementService.java	(revision c19fe86cc2983836dcb157fee711e97b793ba974)
@@ -4,6 +4,4 @@
 import com.db.finki.www.build_board.dto.PermissionResourceWrapper;
 import com.db.finki.www.build_board.entity.access_managment.*;
-import com.db.finki.www.build_board.entity.channel.Channel;
-import com.db.finki.www.build_board.entity.compositeId.ProjectRoleId;
 import com.db.finki.www.build_board.entity.compositeId.ProjectRolePermissionId;
 import com.db.finki.www.build_board.entity.compositeId.ProjectRolePermissionResourceOverrideId;
@@ -16,8 +14,12 @@
 import com.db.finki.www.build_board.repository.access_managment.UserProjectRoleRepository;
 import jakarta.transaction.Transactional;
+import org.hibernate.Hibernate;
 import org.springframework.stereotype.Service;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 @Service
@@ -33,5 +35,5 @@
             ProjectRolePermissionRepository projectRolePermissionRepository,
             ProjectRolePermissionResourceOverrideRepository projectRolePermissionResourceOverrideRepository, UserProjectRoleRepository userProjectRoleRepository
-                                         ) {
+    ) {
         this.projectRoleRepository = projectRoleRepository;
         this.projectRolePermissionResourceOverrideRepository =
@@ -44,5 +46,5 @@
             int userId, String permission, int resourceId,
             int projectId
-                                                ) {
+    ) {
         return projectRolePermissionResourceOverrideRepository.hasPermissionForResource(projectId,
                 userId,
@@ -51,10 +53,10 @@
     }
 
-    public List<ProjectRole> getRolesForDeveloperInProject(BBUser user,Project project){
-        return userProjectRoleRepository.findByIdRoleIdProjectIdAndIdUserId(project.getId(),user.getId()).stream().map(UsersProjectRoles::getProjectRole).toList();
+    public List<ProjectRole> getRolesForDeveloperInProject(BBUser user, Project project) {
+        return userProjectRoleRepository.findByIdRoleProjectIdAndIdUserId(project.getId(), user.getId()).stream().map(UsersProjectRoles::getProjectRole).toList();
     }
 
     public List<ProjectRole> getRolesForMembersInProject(Project project) {
-        return projectRoleRepository.findByIdProjectId(project.getId());
+        return projectRoleRepository.findByProject(project);
     }
 
@@ -62,5 +64,5 @@
             ProjectRole role,
             List<Permission> permissions
-                                                                          ) {
+    ) {
         return permissions
                 .stream()
@@ -76,7 +78,6 @@
     private List<ProjectRolePermission> mapPerResourceToProjectRolePermissions(
             ProjectRole role,
-            List<PermissionResourceWrapper> permissions,
-            ProjectResourcePermissionOverrideType overrideType
-                                                                              ) {
+            List<PermissionResourceWrapper> permissions
+    ) {
         return permissions
                 .stream()
@@ -93,19 +94,19 @@
             List<ProjectRolePermission> rolePermissions
 
-                                                                              ) {
-       List<ProjectRolePermissionResourceOverride> overrides = new ArrayList<>();
+    ) {
+        List<ProjectRolePermissionResourceOverride> overrides = new ArrayList<>();
 
-       for(int i = 0 ; i < resources.size() ; i++){
-           overrides.add(
-                   new ProjectRolePermissionResourceOverride(
-                           new ProjectRolePermissionResourceOverrideId(
-                                  rolePermissions.get(i),
-                                  resources.get(i)
-                           )
-                   )
-                                                     );
-       }
+        for (int i = 0; i < resources.size(); i++) {
+            overrides.add(
+                    new ProjectRolePermissionResourceOverride(
+                            new ProjectRolePermissionResourceOverrideId(
+                                    rolePermissions.get(i),
+                                    resources.get(i)
+                            )
+                    )
+            );
+        }
 
-       return overrides;
+        return overrides;
     }
 
@@ -114,49 +115,56 @@
     }
 
+
+    @Transactional
+    public void updateRole(Integer id, AddRoleDTOEntities addRoleDTO) {
+
+        ProjectRole existingRole = projectRoleRepository.findById(id).orElseThrow(() -> new IllegalArgumentException("bad role id"));
+        projectRolePermissionRepository.deleteAllByIdRole(existingRole);
+
+        existingRole.setName(addRoleDTO.getName());
+        existingRole.setOverrideType(addRoleDTO.getProjectResourcePermissionOverrideType().toString());
+
+        projectRoleRepository.save(existingRole);
+
+        List<ProjectRolePermission> newGlobalPermissions = mapGlobalsToProjectRolePermissions(existingRole, addRoleDTO.getGlobalPermissions());
+        List<ProjectRolePermission> newPerResourcePermissions = mapPerResourceToProjectRolePermissions(existingRole,addRoleDTO.getPermissionsResourceWrappers());
+        List<ProjectRolePermissionResourceOverride> resourceOverrides = mapToResourceOverrides(getResources(addRoleDTO.getPermissionsResourceWrappers()),newPerResourcePermissions);
+
+
+        projectRolePermissionRepository.saveAll(newGlobalPermissions);
+        projectRolePermissionRepository.saveAll(newPerResourcePermissions);
+        projectRolePermissionResourceOverrideRepository.saveAll(resourceOverrides);
+
+    }
+
     @Transactional
     public void addRole(AddRoleDTOEntities addRoleDTO) {
         ProjectRole role = projectRoleRepository.save(
                 new ProjectRole(
-                        new ProjectRoleId(
-                                addRoleDTO.getName(),
-                                addRoleDTO.getProject()
-                        ),
-                        addRoleDTO.getProjectResourcePermissionOverrideType().name()
+                        addRoleDTO.getProject(),
+                        addRoleDTO.getName(),
+                        addRoleDTO.getProjectResourcePermissionOverrideType().toString()
                 )
-                                                     );
+        );
 
-        //GLOBALS
-        projectRolePermissionRepository.saveAll(mapGlobalsToProjectRolePermissions(role,
-                addRoleDTO.getGlobalPermissions()
-                                                                                  ));
-
-        //LOCALS
-        //Bitno e po red posle vo role_permissions_overrides da gi klavash
-        List<ProjectRolePermission> entities = mapPerResourceToProjectRolePermissions(
-                role,
-                addRoleDTO.getPermissionResource(),
-                addRoleDTO.getProjectResourcePermissionOverrideType()
-                                                                                     );
+        List<ProjectRolePermission> entities = mapPerResourceToProjectRolePermissions(role, addRoleDTO.getPermissionsResourceWrappers());
+        projectRolePermissionRepository.saveAll(mapGlobalsToProjectRolePermissions(role, addRoleDTO.getGlobalPermissions()));
         projectRolePermissionRepository.saveAll(entities);
-
-        //role_permissions_overrides
         projectRolePermissionResourceOverrideRepository.saveAll(mapToResourceOverrides(
-                getResources(addRoleDTO.getPermissionResource()),
+                getResources(addRoleDTO.getPermissionsResourceWrappers()),
                 entities
-                                                                                      ));
+        ));
     }
 
-    public void deleteByRoleNameAndProjectTitle(Project project, String roleName) {
-        projectRoleRepository.deleteById(new ProjectRoleId(roleName,project));
+    public void deleteRole(ProjectRole role) {
+        projectRoleRepository.deleteById(role.getId());
     }
 
-    public void addRolesToUser(BBUser user, Project project, List<String> roleNames) {
-        List<UsersProjectRoles> roles = roleNames
-                .stream()
-                .map(r -> new ProjectRole(new ProjectRoleId(r,project)))
-                .map(role -> new UsersProjectRoles(new UsersProjectRolesId(role,user)))
+    public void addRolesToUser(BBUser user, List<ProjectRole> roles) {
+        List<UsersProjectRoles> usersProjectRoles = roles.stream()
+                .map(role -> new UsersProjectRoles(new UsersProjectRolesId(role, user)))
                 .toList();
 
-        userProjectRoleRepository.saveAll(roles);
+        userProjectRoleRepository.saveAll(usersProjectRoles);
 
 
@@ -164,13 +172,14 @@
 
     public void deleteRoleForUser(BBUser user, Project project, String roleName) {
-        ProjectRole role = new ProjectRole(new ProjectRoleId(roleName,project));
-        userProjectRoleRepository.deleteById(new UsersProjectRolesId(role,user));
+        ProjectRole role = new ProjectRole(project, roleName);
+        userProjectRoleRepository.deleteById(new UsersProjectRolesId(role, user));
     }
 
-    public List<ProjectRolePermission> getRolePermissionsForRole(String roleName, Project project) {
-        return projectRolePermissionRepository.findAllByIdProjectRole(new ProjectRole(new ProjectRoleId(roleName,project)));
+    public List<ProjectRolePermission> getRolePermissionsForRoleInProject(ProjectRole role) {
+        return projectRolePermissionRepository.findAllByIdRole(role);
     }
-    public List<ProjectRolePermissionResourceOverride> getResourceOverridesForRole(String roleName, Project project) {
-        return projectRolePermissionResourceOverrideRepository.findAllByIdProjectRolePermissionIdProjectRole(new ProjectRole(new ProjectRoleId(roleName,project)));
+
+    public List<ProjectRolePermissionResourceOverride> getResourceOverridesForRole(ProjectRole role) {
+        return projectRolePermissionResourceOverrideRepository.findAllByIdProjectRolePermissionIdRole(role);
     }
 }
Index: src/main/java/com/db/finki/www/build_board/service/channel/ChannelService.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/service/channel/ChannelService.java	(revision becf9bfe9c849e851f1a6eca11e29a68f4fbfd22)
+++ src/main/java/com/db/finki/www/build_board/service/channel/ChannelService.java	(revision c19fe86cc2983836dcb157fee711e97b793ba974)
@@ -1,4 +1,5 @@
 package com.db.finki.www.build_board.service.channel;
 
+import com.db.finki.www.build_board.entity.access_managment.ProjectRole;
 import com.db.finki.www.build_board.entity.channel.Channel;
 import com.db.finki.www.build_board.entity.compositeId.ChannelId;
@@ -8,5 +9,5 @@
 import com.db.finki.www.build_board.entity.view.RoleChannelPermissions;
 import com.db.finki.www.build_board.repository.DeveloperRepository;
-import com.db.finki.www.build_board.repository.RoleChannelPermissionsRepository;
+import com.db.finki.www.build_board.repository.access_managment.RoleChannelPermissionsRepository;
 import com.db.finki.www.build_board.repository.access_managment.ProjectRolePermissionResourceOverrideRepository;
 import com.db.finki.www.build_board.repository.channel.ChannelRepository;
@@ -39,6 +40,6 @@
     }
 
-    public List<RoleChannelPermissions> getRoleChannelPermissions(String roleName, Integer projectId) {
-        return roleChannelPermissionsRepository.findByRoleNameAndProjectId(roleName, projectId);
+    public List<RoleChannelPermissions> getChannelPermissionsForRole(ProjectRole role) {
+        return roleChannelPermissionsRepository.findByRole(role);
     }
 
Index: src/main/resources/db/migration/V1__init_ddl.sql
===================================================================
--- src/main/resources/db/migration/V1__init_ddl.sql	(revision becf9bfe9c849e851f1a6eca11e29a68f4fbfd22)
+++ src/main/resources/db/migration/V1__init_ddl.sql	(revision c19fe86cc2983836dcb157fee711e97b793ba974)
@@ -165,8 +165,8 @@
 create table project_role
 (
+    id serial PRIMARY KEY ,
     name       varchar(32) NOT NULL,
     project_id int references project_thread (id) ON DELETE CASCADE,
-    override_type varchar(20) check ( override_type in ('INCLUDE','EXCLUDE')) NOT NULL DEFAULT 'EXCLUDE',
-    PRIMARY KEY (name, project_id)
+    override_type varchar(20) check ( override_type in ('INCLUDE','EXCLUDE')) NOT NULL DEFAULT 'EXCLUDE'
 );
 
@@ -174,9 +174,7 @@
 (
     permission_name VARCHAR(32),
-    role_name       VARCHAR(32),
-    project_id      INT,
-    FOREIGN KEY (role_name, project_id) REFERENCES project_role (name, project_id) ON DELETE CASCADE,
+    role_id INT REFERENCES project_role(id) ON DELETE CASCADE NOT NULL,
     FOREIGN KEY (permission_name) REFERENCES permissions(name),
-    PRIMARY KEY (permission_name, role_name, project_id)
+    PRIMARY KEY (permission_name, role_id)
 );
 
@@ -186,10 +184,9 @@
 CREATE TABLE role_permissions_overrides
 (
-    permission_name VARCHAR(32) REFERENCES permissions (name) NOT NULL,
-    role_name       VARCHAR(32) NOT NULL,
-    project_id INT NOT NULL,
+    permission_name VARCHAR(32),
+    role_id INT REFERENCES project_role(id) ON DELETE CASCADE NOT NULL,
     project_resource_id int references project_resource(id) NOT NULL,
-    FOREIGN KEY (role_name, project_id,permission_name) REFERENCES role_permissions (role_name,project_id,permission_name) ON DELETE CASCADE,
-    PRIMARY KEY (role_name,project_id,permission_name,project_resource_id)
+    FOREIGN KEY (role_id,permission_name) REFERENCES role_permissions (role_id,permission_name) ON DELETE CASCADE,
+    PRIMARY KEY (role_id,permission_name,project_resource_id)
 );
 
@@ -197,8 +194,6 @@
 (
     user_id    INT REFERENCES developer (id) on delete cascade,
-    project_id INT,
-    role_name  VARCHAR(32),
-    FOREIGN KEY (role_name, project_id) REFERENCES project_role (name, project_id) ON DELETE CASCADE,
-    PRIMARY KEY (user_id, project_id, role_name)
+    role_id    INT REFERENCES project_role(id) on delete cascade,
+    PRIMARY KEY (user_id, role_id)
 );
 
@@ -301,6 +296,5 @@
     c.project_resource_id,
     c.name,
-    pr.name AS role_name,
-    c.project_id,
+    pr.id as role_id,
     COALESCE(
                     STRING_AGG(
@@ -318,13 +312,11 @@
               ON pr.project_id = c.project_id
          LEFT JOIN role_permissions rp
-                   ON rp.project_id = c.project_id
-                       AND rp.role_name = pr.name
+                   ON rp.role_id = pr.id
                        AND rp.permission_name IN ('READ','WRITE')
          LEFT JOIN role_permissions_overrides rpo
-                   ON rpo.project_id = rp.project_id
-                       AND rpo.role_name = rp.role_name
+                   ON rpo.role_id = pr.id
                        AND rpo.permission_name = rp.permission_name
                        AND rpo.project_resource_id = c.project_resource_id
-GROUP BY c.project_resource_id, c.name, pr.name, c.project_id;
-
-
+GROUP BY c.project_resource_id, c.name,pr.id
+
+
Index: src/main/resources/db/migration/V3__add_test_data.sql
===================================================================
--- src/main/resources/db/migration/V3__add_test_data.sql	(revision becf9bfe9c849e851f1a6eca11e29a68f4fbfd22)
+++ src/main/resources/db/migration/V3__add_test_data.sql	(revision c19fe86cc2983836dcb157fee711e97b793ba974)
@@ -75,15 +75,15 @@
 
 
-INSERT INTO users_project_roles (user_id, project_id, role_name)
-VALUES
-    (3, 5, 'Admin'),
-    (5, 5, 'Developer');
-
-INSERT INTO role_permissions (permission_name, role_name, project_id)
-VALUES
-    ('READ', 'Admin', 5),
-    ('WRITE', 'Admin', 5),
-    ('CREATE','Admin',5),
-    ('DELETE','Admin',5);
+INSERT INTO users_project_roles (user_id, role_id)
+VALUES
+    (3, 1),
+    (5, 2);
+
+INSERT INTO role_permissions (permission_name, role_id)
+VALUES
+    ('READ', 1),
+    ('WRITE', 1),
+    ('CREATE',1),
+    ('DELETE',1);
 
 insert into submission(created_by,status,description)
Index: src/main/resources/templates/project_pages/edit-role.html
===================================================================
--- src/main/resources/templates/project_pages/edit-role.html	(revision becf9bfe9c849e851f1a6eca11e29a68f4fbfd22)
+++ src/main/resources/templates/project_pages/edit-role.html	(revision c19fe86cc2983836dcb157fee711e97b793ba974)
@@ -6,5 +6,5 @@
     <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
 </head>
-<body th:attr="data-project-title=${project.getTitle()}">
+<body th:attr="data-project-title=${role.getProject().getTitle()},data-role-id=${role.getId()}">
 
 <div th:replace="/home_pages/home :: navigation"></div>
@@ -18,5 +18,5 @@
             </div>
 
-            <form th:action="@{/projects/{title}/roles/{roleName}/update(title=${project.getTitle()}, roleName=${roleName})}"
+            <form th:action="@{/projects/{title}/roles/{id}/edit(title=${role.getProject().getTitle()}, id=${role.getId()})}"
                   method="post"
                   id="update-role-form">
@@ -27,5 +27,5 @@
                         <label for="updateRoleName" class="form-label">Role Name</label>
                         <input type="text" class="form-control" id="updateRoleName" name="roleName"
-                               th:value="${roleName}" required>
+                               th:value="${role.getName()}" required>
                     </div>
 
@@ -34,12 +34,12 @@
                         <label class="form-label">Override Type</label>
                         <div class="form-check">
-                            <input class="form-check-input" type="radio" name="overrideType" id="includeTypeUpdate" value="INCLUDE"
+                            <input class="form-check-input" type="radio" name="overrideType" id="includeType" value="INCLUDE"
                                    th:checked="${overrideType == 'INCLUDE'}">
-                            <label class="form-check-label" for="includeTypeUpdate">INCLUDE</label>
+                            <label class="form-check-label" for="includeType">INCLUDE</label>
                         </div>
                         <div class="form-check">
-                            <input class="form-check-input" type="radio" name="overrideType" id="excludeTypeUpdate" value="EXCLUDE"
+                            <input class="form-check-input" type="radio" name="overrideType" id="excludeType" value="EXCLUDE"
                                    th:checked="${overrideType == 'EXCLUDE'}">
-                            <label class="form-check-label" for="excludeTypeUpdate">EXCLUDE</label>
+                            <label class="form-check-label" for="excludeType">EXCLUDE</label>
                         </div>
                     </div>
@@ -52,5 +52,5 @@
                                 <input class="form-check-input"
                                        type="checkbox"
-                                       th:id="'global-' + ${permission}"
+                                       th:id="'global-permission'"
                                        th:name="'global-permission'"
                                        th:value="${permission.toLowerCase()}"
@@ -63,21 +63,36 @@
 
                     <!-- Per-Resource Permissions -->
+                    <!-- Per-Resource Permissions -->
                     <div class="mb-2 border p-2 rounded">
                         <strong>Per-Resource Permissions</strong>
-                        <div th:each="permission : ${perResourcePermissions}">
+                        <div class="mt-2" th:each="rcp : ${roleChannelPermissions}">
                             <div class="mb-2">
-                                <strong th:text="${permission}">Permission Name</strong>
-                                <div class="d-flex flex-wrap gap-2 mt-1" th:each="rcp : ${roleChannelPermissions}">
+                                <strong th:text="${rcp.getChannelName()}">Channel Name</strong>
+                                <div class="d-flex flex-wrap gap-3 mt-1">
+                                    <!-- READ -->
                                     <div class="form-check">
                                         <input class="form-check-input perm-checkbox"
                                                type="checkbox"
-                                               th:id="${permission + '-' + rcp.getResourceId()}"
+                                               th:id="${'read-' + rcp.getResourceId()}"
                                                name="per-resource-permission"
-                                               th:value="${permission}"
+                                               value="READ"
                                                th:attr="data-resource-id=${rcp.getResourceId()}"
-                                               th:checked="${rcp.getPermissions().contains(permission)}">
+                                               th:checked="${overrideType == 'INCLUDE' && rcp.getPermissions().contains('READ')
+                                               || overrideType == 'EXCLUDE' && !rcp.getPermissions().contains('READ')}">
                                         <label class="form-check-label"
-                                               th:for="${permission + '-' + rcp.getResourceId()}"
-                                               th:text="${rcp.getChannelName()}">Resource Name</label>
+                                               th:for="${'read-' + rcp.getResourceId()}">READ</label>
+                                    </div>
+                                    <!-- WRITE -->
+                                    <div class="form-check">
+                                        <input class="form-check-input perm-checkbox"
+                                               type="checkbox"
+                                               th:id="${'write-' + rcp.getResourceId()}"
+                                               name="per-resource-permission"
+                                               value="WRITE"
+                                               th:attr="data-resource-id=${rcp.getResourceId()}"
+                                               th:checked="${overrideType == 'INCLUDE' && rcp.getPermissions().contains('WRITE')
+                                               || overrideType == 'EXCLUDE' && !rcp.getPermissions().contains('WRITE') }">
+                                        <label class="form-check-label"
+                                               th:for="${'write-' + rcp.getResourceId()}">WRITE</label>
                                     </div>
                                 </div>
@@ -86,9 +101,10 @@
                     </div>
 
+
                 </div>
 
                 <!-- Submit -->
                 <div class="modal-footer d-flex justify-content-between">
-                    <a th:href="@{/projects/{ptitle}/roles (ptitle=${project.getTitle()})}" class="btn btn-secondary w-100 me-2">Cancel</a>
+                    <a th:href="@{/projects/{ptitle}/roles (ptitle=${role.getProject().getTitle()})}" class="btn btn-secondary w-100 me-2">Cancel</a>
                     <button type="submit" id="update-role-modal-submit" class="btn btn-warning w-100">Update Role</button>
                 </div>
@@ -130,11 +146,16 @@
         return document.body.dataset.projectTitle
     }
-
-    document.getElementById('add-role-form').addEventListener('submit', async function(event) {
+    const getRoleId = () => {
+        return document.body.dataset.roleId
+    }
+
+    document.getElementById('update-role-form').addEventListener('submit', async function(event) {
         event.preventDefault()
-        const roleNameInput = document.querySelector("#roleName")
+        const roleNameInput = document.querySelector("#updateRoleName")
         const includeExcludeInput = document.querySelectorAll("input[name='overrideType']")
         const globalPermissions = document.querySelectorAll("input[name='global-permission']")
         const perResourcePermissions = document.querySelectorAll("input[name='per-resource-permission']")
+
+        const roleId = getRoleId()
 
         const roleName = roleNameInput.value
@@ -144,5 +165,5 @@
         const projectTitle = getProjectTitle()
 
-        const response = await fetch(`/projects/${projectTitle}/roles/${roleName}/edit`, {
+        const response = await fetch(`/projects/${projectTitle}/roles/${roleId}/edit`, {
             method: "POST",
             headers: {
@@ -165,19 +186,8 @@
             throw new Error("Something went wrong")
 
-        location.reload()
+        window.location.replace(`/projects/${projectTitle}/roles`)
     });
 
     document.addEventListener("DOMContentLoaded", function() {
-        const includeRadio = document.getElementById("includeType");
-        const excludeRadio = document.getElementById("excludeType");
-        const permCheckboxes = document.querySelectorAll(".perm-checkbox");
-
-        function updateCheckboxes() {
-            permCheckboxes.forEach(cb => cb.checked = !cb.checked);
-        }
-
-        includeRadio.addEventListener("change", updateCheckboxes);
-        excludeRadio.addEventListener("change", updateCheckboxes);
-
         const modalEl = document.getElementById('updateRoleModal');
         const modal = new bootstrap.Modal(modalEl, {
@@ -186,4 +196,16 @@
         });
         modal.show();
+        const includeRadio = document.getElementById("includeType");
+        const excludeRadio = document.getElementById("excludeType");
+        const permCheckboxes = document.querySelectorAll(".perm-checkbox");
+
+        function updateCheckboxes() {
+            permCheckboxes.forEach(cb => cb.checked = !cb.checked);
+        }
+
+        includeRadio.addEventListener("change", updateCheckboxes);
+        excludeRadio.addEventListener("change", updateCheckboxes);
+
+
     });
 </script>
Index: src/main/resources/templates/project_pages/members.html
===================================================================
--- src/main/resources/templates/project_pages/members.html	(revision becf9bfe9c849e851f1a6eca11e29a68f4fbfd22)
+++ src/main/resources/templates/project_pages/members.html	(revision c19fe86cc2983836dcb157fee711e97b793ba974)
@@ -148,8 +148,8 @@
                                        type="checkbox"
                                        name="roles"
-                                       th:value="${role.getId().getName()}"
+                                       th:value="${role.getName()}"
                                        id="role_${role.getId().getName()}">
                                 <label class="form-check-label"
-                                       th:for="${'role_' + role.getId().getName()}"
+                                       th:for="${'role_' + role.getName()}"
                                        th:text="${role.getName()}"></label>
                             </div>
Index: src/main/resources/templates/project_pages/project-roles.html
===================================================================
--- src/main/resources/templates/project_pages/project-roles.html	(revision becf9bfe9c849e851f1a6eca11e29a68f4fbfd22)
+++ src/main/resources/templates/project_pages/project-roles.html	(revision c19fe86cc2983836dcb157fee711e97b793ba974)
@@ -54,15 +54,15 @@
                 </div>
 
-                <div th:each="dvpr : ${developersRoles}" class="role-card d-flex justify-content-between align-items-center">
+                <div th:each="role : ${developersRoles}" class="role-card d-flex justify-content-between align-items-center">
                     <div>
-                        <h5 th:text="${dvpr.getName()}">Role Name</h5>
+                        <h5 th:text="${role.getName()}">Role Name</h5>
 <!--                        <small th:text="'Members: ' + ${role.memberCount}">Members: 0</small>-->
                     </div>
                     <div class="d-flex gap-2">
                         <button th:if="${isManager}" class="btn btn-warning btn-sm"
-                                data-bs-toggle="modal" th:data-bs-target="'#updateRoleModal-' + ${dvpr.getId()}">
-                            <a th:href="@{/projects/{title}/roles/{roleName}/edit (title=${project.getTitle()},roleName=${dvpr.getName()})}">Edit</a>
+                                data-bs-toggle="modal" th:data-bs-target="'#updateRoleModal-' + ${role.getId()}">
+                            <a th:href="@{/projects/{title}/roles/{id}/edit (title=${project.getTitle()},id=${role.getId()})}">Edit</a>
                         </button>
-                        <form th:if="${isManager}" th:action="@{/projects/{projectTitle}/roles/{roleName}/delete (projectTitle=${project.getTitle()}, roleName=${dvpr.getName()})}" method="post">
+                        <form th:if="${isManager}" th:action="@{/projects/{projectTitle}/roles/{id}/delete (projectTitle=${project.getTitle()}, id=${role.getId()})}" method="post">
                             <button type="submit" class="btn btn-danger btn-sm">Delete</button>
                         </form>
