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 d1ebd7639458b8fd0a3b45424adfb842401c4ac1)
+++ src/main/java/com/db/finki/www/build_board/controller/thread_controller/ProjectController.java	(revision 591e6827984f23e7df9735ec611ec49da3fa5486)
@@ -1,10 +1,17 @@
 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.Permission;
+import com.db.finki.www.build_board.entity.access_managment.ProjectResource;
+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.thread.Project;
 import com.db.finki.www.build_board.entity.user_type.BBUser;
 import com.db.finki.www.build_board.service.access_managment.AddRoleDTOEntitiesMapper;
 import com.db.finki.www.build_board.service.access_managment.ProjectAccessManagementService;
+import com.db.finki.www.build_board.service.channel.ChannelService;
 import com.db.finki.www.build_board.service.thread.impl.ProjectService;
 import com.db.finki.www.build_board.service.thread.impl.TagServiceImpl;
@@ -19,5 +26,7 @@
 import org.springframework.web.servlet.mvc.support.RedirectAttributes;
 
-import java.util.List;
+import java.util.*;
+import java.util.function.Function;
+import java.util.stream.Collectors;
 
 
@@ -32,6 +41,7 @@
     private final AddRoleDTOEntitiesMapper mapper;
     private final BBUserDetailsService userDetailsService;
-
-    public ProjectController(ProjectService projectService, TagServiceImpl topicService, ProjectAccessManagementService projectAccessManagementService, AddRoleDTOEntitiesMapper mapper, BBUserDetailsService userDetailsService) {
+    private final ChannelService channelService;
+
+    public ProjectController(ProjectService projectService, TagServiceImpl topicService, ProjectAccessManagementService projectAccessManagementService, AddRoleDTOEntitiesMapper mapper, BBUserDetailsService userDetailsService, ChannelService channelService) {
         this.projectService = projectService;
         this.tagService = topicService;
@@ -39,4 +49,5 @@
         this.mapper = mapper;
         this.userDetailsService = userDetailsService;
+        this.channelService = channelService;
     }
 
@@ -105,4 +116,70 @@
                 "INCLUDE");
         return "project_pages/project-roles";
+    }
+
+    @GetMapping("{title}/roles/{roleName}/edit")
+    public String getEditRolePage(@PathVariable(name = "title") Project project, @PathVariable(name = "roleName") String roleName, Model model) {
+        List<ProjectRolePermission> projectRolePermissions = projectAccessManagementService.getRolePermissionsForRole(roleName,project);
+        List<ProjectRolePermissionResourceOverride> projectRolePermissionResourceOverrides = projectAccessManagementService.getResourceOverridesForRole(roleName, project);
+        List<Channel> channels = channelService.getAllChannelsForProject(project);
+        List<String> perResourcePermissionNames = List.of("READ",
+                "WRITE");
+
+         ProjectResourcePermissionOverrideType overrideType = projectRolePermissions
+                 .stream()
+                 .filter(p -> p.getPermission().getName().equals("READ") || p.getPermission().getName().equals("WRITE"))
+                 .findFirst().map(ProjectRolePermission::getOverrideType).orElseThrow(() -> new IllegalStateException("krcna"));
+        Map<ProjectResource,Channel> resourceToChannelMap = channels.stream().collect(Collectors.toMap(Channel::getProjectResource, Function.identity()));
+
+        Set<ProjectResource> resourceOverrides = projectRolePermissionResourceOverrides.stream()
+                .map(ProjectRolePermissionResourceOverride::getProjectResource)
+                .collect(Collectors.toSet());
+
+        Set<ProjectResource> channelProjectResources = resourceToChannelMap.keySet();
+
+        Map<String, Set<ProjectResource>> init = new HashMap<>();
+        init.put("READ", new HashSet<>());
+        init.put("WRITE", new HashSet<>());
+
+        projectRolePermissionResourceOverrides.stream()
+                .filter(pr -> pr.getProjectRolePermission()
+                        .getPermission().getName().equals("READ") || pr.getProjectRolePermission().getPermission().getName().equals("WRITE"))
+                .forEach(p -> init.get(p.getProjectRolePermission().getPermission().getName()).add(p.getProjectResource()));
+
+        Map<String, Set<ProjectResource>> selectedChannels = init.entrySet()
+                .stream().map(entry -> {
+                    if (overrideType == ProjectResourcePermissionOverrideType.INCLUDE) {
+                        entry.getValue().retainAll(channelProjectResources);
+                        return Map.entry(entry.getKey(), entry.getValue());
+                    } else {
+                        Set<ProjectResource> tmp = new HashSet<>(channelProjectResources);
+                        tmp.removeAll(resourceOverrides);
+                        return Map.entry(entry.getKey(), tmp);
+                    }
+                }).collect(Collectors.toMap(
+                        Map.Entry::getKey,
+                        Map.Entry::getValue
+                ));
+
+
+        model.addAttribute("roleName",roleName);
+        model.addAttribute("overrideType",projectRolePermissions.get(0).getOverrideType().name());
+        model.addAttribute("project",project);
+        model.addAttribute("globalPermissions",
+                List.of("CREATE",
+                        "DELETE"));
+        model.addAttribute("perResourcePermissions",
+                List.of("READ",
+                        "WRITE"));
+        model.addAttribute("selectedGlobalPermissions",projectRolePermissions
+                .stream()
+                .filter(p -> p.getPermission().getName().equals("CREATE") || p.getPermission().getName().equals("DELETE")).collect(Collectors.toSet()));
+        model.addAttribute("channels",channels);
+        model.addAttribute("selectedChannels",selectedChannels);
+
+        return "project_pages/edit-role";
+
+
+
     }
 
Index: src/main/java/com/db/finki/www/build_board/entity/access_managment/Permission.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/entity/access_managment/Permission.java	(revision d1ebd7639458b8fd0a3b45424adfb842401c4ac1)
+++ src/main/java/com/db/finki/www/build_board/entity/access_managment/Permission.java	(revision 591e6827984f23e7df9735ec611ec49da3fa5486)
@@ -8,4 +8,6 @@
 import lombok.NoArgsConstructor;
 import lombok.Setter;
+
+import java.util.Objects;
 
 @Table(name = "permissions")
@@ -26,3 +28,15 @@
         this.name = name;
     }
+
+    @Override
+    public boolean equals(Object o) {
+        if (o == null || getClass() != o.getClass()) return false;
+        Permission that = (Permission) o;
+        return Objects.equals(name, that.name);
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hashCode(name);
+    }
 }
Index: src/main/java/com/db/finki/www/build_board/entity/access_managment/ProjectResource.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/entity/access_managment/ProjectResource.java	(revision d1ebd7639458b8fd0a3b45424adfb842401c4ac1)
+++ src/main/java/com/db/finki/www/build_board/entity/access_managment/ProjectResource.java	(revision 591e6827984f23e7df9735ec611ec49da3fa5486)
@@ -6,4 +6,6 @@
 import lombok.NoArgsConstructor;
 import lombok.Setter;
+
+import java.util.Objects;
 
 @Getter
@@ -18,3 +20,15 @@
     @SequenceGenerator(name = "project_resource_id_seq",sequenceName = "project_resource_id_seq",allocationSize=1)
     int id;
+
+    @Override
+    public boolean equals(Object o) {
+        if (o == null || getClass() != o.getClass()) return false;
+        ProjectResource that = (ProjectResource) o;
+        return id == that.id;
+    }
+
+    @Override
+    public int hashCode() {
+        return Objects.hashCode(id);
+    }
 }
Index: src/main/java/com/db/finki/www/build_board/entity/access_managment/ProjectRolePermissionResourceOverride.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/entity/access_managment/ProjectRolePermissionResourceOverride.java	(revision d1ebd7639458b8fd0a3b45424adfb842401c4ac1)
+++ src/main/java/com/db/finki/www/build_board/entity/access_managment/ProjectRolePermissionResourceOverride.java	(revision 591e6827984f23e7df9735ec611ec49da3fa5486)
@@ -2,5 +2,4 @@
 
 import com.db.finki.www.build_board.entity.compositeId.ProjectRolePermissionResourceOverrideId;
-import jakarta.persistence.Column;
 import jakarta.persistence.EmbeddedId;
 import jakarta.persistence.Entity;
@@ -20,12 +19,12 @@
 
     @EmbeddedId
-    private ProjectRolePermissionResourceOverrideId projectRolePermissionResourceOverrideId;
+    private ProjectRolePermissionResourceOverrideId id;
 
 
     public ProjectRolePermission getProjectRolePermission() {
-        return projectRolePermissionResourceOverrideId.getProjectRolePermission();
+        return id.getProjectRolePermission();
     }
     public ProjectResource getProjectResource() {
-        return projectRolePermissionResourceOverrideId.getProjectResource();
+        return id.getProjectResource();
     }
 }
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 d1ebd7639458b8fd0a3b45424adfb842401c4ac1)
+++ src/main/java/com/db/finki/www/build_board/repository/access_managment/ProjectRolePermissionRepository.java	(revision 591e6827984f23e7df9735ec611ec49da3fa5486)
@@ -4,4 +4,5 @@
 import com.db.finki.www.build_board.entity.access_managment.ProjectRolePermission;
 import com.db.finki.www.build_board.entity.compositeId.ProjectRolePermissionId;
+import com.db.finki.www.build_board.entity.thread.Project;
 import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.Query;
@@ -13,4 +14,5 @@
 public interface ProjectRolePermissionRepository extends JpaRepository<ProjectRolePermission, ProjectRolePermissionId> {
     List<ProjectRolePermission> findByIdProjectRole(ProjectRole projectRole);
+    List<ProjectRolePermission> findAllByIdProjectRole(ProjectRole projectRole);
 
 
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 d1ebd7639458b8fd0a3b45424adfb842401c4ac1)
+++ src/main/java/com/db/finki/www/build_board/repository/access_managment/ProjectRolePermissionResourceOverrideRepository.java	(revision 591e6827984f23e7df9735ec611ec49da3fa5486)
@@ -1,4 +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.ProjectRolePermission;
 import com.db.finki.www.build_board.entity.access_managment.ProjectRolePermissionResourceOverride;
 import com.db.finki.www.build_board.entity.compositeId.ProjectRolePermissionResourceOverrideId;
@@ -6,4 +8,6 @@
 import org.springframework.data.jpa.repository.Query;
 import org.springframework.stereotype.Repository;
+
+import java.util.List;
 
 @Repository
@@ -34,3 +38,5 @@
             """, nativeQuery = true)
     boolean hasPermissionForResource(int projectId,int userId,String permissionName,int resourceId);
+
+    List<ProjectRolePermissionResourceOverride> findAllByIdProjectRolePermissionIdProjectRole(ProjectRole projectRole);
 }
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 d1ebd7639458b8fd0a3b45424adfb842401c4ac1)
+++ src/main/java/com/db/finki/www/build_board/service/access_managment/ProjectAccessManagementService.java	(revision 591e6827984f23e7df9735ec611ec49da3fa5486)
@@ -168,3 +168,10 @@
         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<ProjectRolePermissionResourceOverride> getResourceOverridesForRole(String roleName, Project project) {
+        return projectRolePermissionResourceOverrideRepository.findAllByIdProjectRolePermissionIdProjectRole(new ProjectRole(new ProjectRoleId(roleName,project)));
+    }
 }
Index: src/main/resources/templates/project_pages/edit-role.html
===================================================================
--- src/main/resources/templates/project_pages/edit-role.html	(revision d1ebd7639458b8fd0a3b45424adfb842401c4ac1)
+++ src/main/resources/templates/project_pages/edit-role.html	(revision 591e6827984f23e7df9735ec611ec49da3fa5486)
@@ -6,32 +6,92 @@
     <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
 </head>
-<body>
+<body th:attr="data-project-title=${project.getTitle()}">
+
 <div th:replace="/home_pages/home :: navigation"></div>
 
-<div class="container mt-5">
-    <div class="row justify-content-center">
-        <div class="col-md-6">
-
-            <div class="card shadow">
-                <div class="card-header bg-warning text-white">
-                    <h5 class="mb-0">Update Role</h5>
-                </div>
-                <div class="card-body">
-                    <form th:action="@{/projects/{title}/roles/{roleName}/update(title=${project.getTitle()}, roleName=${role.name})}"
-                          method="post">
-                        <div class="mb-3">
-                            <label for="updateRoleName" class="form-label">Role Name</label>
-                            <input type="text"
-                                   class="form-control"
-                                   id="updateRoleName"
-                                   name="roleName"
-                                   th:value="${role.name}"
-                                   required>
-                        </div>
-                        <button type="submit" class="btn btn-warning w-100">Update Role</button>
-                    </form>
-                </div>
+<!-- Update Role Modal (prefilled) -->
+<div class="modal fade show" id="updateRoleModal" tabindex="-1" aria-labelledby="updateRoleModalLabel" aria-modal="true" style="display: block;">
+    <div class="modal-dialog modal-lg">
+        <div class="modal-content">
+            <div class="modal-header">
+                <h5 class="modal-title">Update Role</h5>
             </div>
 
+            <form th:action="@{/projects/{title}/roles/{roleName}/update(title=${project.getTitle()}, roleName=${roleName})}"
+                  method="post"
+                  id="update-role-form">
+
+                <div class="modal-body">
+                    <!-- Role Name -->
+                    <div class="mb-3">
+                        <label for="updateRoleName" class="form-label">Role Name</label>
+                        <input type="text" class="form-control" id="updateRoleName" name="roleName"
+                               th:value="${roleName}" required>
+                    </div>
+
+                    <!-- Override Type -->
+                    <div class="mb-3">
+                        <label class="form-label">Override Type</label>
+                        <div class="form-check">
+                            <input class="form-check-input" type="radio" name="overrideType" id="includeTypeUpdate" value="INCLUDE"
+                                   th:checked="${overrideType == 'INCLUDE' ? 'checked' : ''}">
+                            <label class="form-check-label" for="includeTypeUpdate">INCLUDE</label>
+                        </div>
+                        <div class="form-check">
+                            <input class="form-check-input" type="radio" name="overrideType" id="excludeTypeUpdate" value="EXCLUDE"
+                                   th:checked="${overrideType == 'EXCLUDE' ? 'checked' : ''}">
+                            <label class="form-check-label" for="excludeTypeUpdate">EXCLUDE</label>
+                        </div>
+                    </div>
+
+                    <!-- Global Permissions -->
+                    <div class="mb-2 border p-2 rounded">
+                        <strong>Global Permissions</strong>
+                        <div class="d-flex flex-wrap gap-2 mt-1" th:each="permission : ${globalPermissions}">
+                            <div class="form-check">
+                                <input class="form-check-input"
+                                       type="checkbox"
+                                       th:id="'global-' + ${permission}"
+                                       th:name="'global-permission'"
+                                       th:value="${permission.toLowerCase()}"
+                                       th:checked="${selectedGlobalPermissions.contains(permission) ? 'checked' : ''}">
+                                <label class="form-check-label" th:for="'global-' + ${permission}"
+                                       th:text="${permission.toLowerCase() + ' channels'}">Permission</label>
+                            </div>
+                        </div>
+                    </div>
+
+                    <!-- Per-Resource Permissions -->
+                    <div class="mb-2 border p-2 rounded">
+                        <strong>Per-Resource Permissions</strong>
+                        <div th:each="permission : ${perResourcePermissions}">
+                            <div class="mb-2">
+                                <strong th:text="${permission}">Permission Name</strong>
+                                <div class="d-flex flex-wrap gap-2 mt-1" th:each="channel : ${project.getChannels()}">
+                                    <div class="form-check">
+                                        <input class="form-check-input perm-checkbox"
+                                               type="checkbox"
+                                               th:id="${permission + '-' + channel.getProjectResource().getId()}"
+                                               name="per-resource-permission"
+                                               th:value="${permission}"
+                                               th:attr="data-resource-id=${channel.getProjectResource().getId()}"
+                                               th:checked="${selectedChannels.get(permission).contains(channel.getProjectResource())}">
+                                        <label class="form-check-label"
+                                               th:for="${permission + '-' + channel.getProjectResource().getId()}"
+                                               th:text="${channel.getName()}">Resource Name</label>
+                                    </div>
+                                </div>
+                            </div>
+                        </div>
+                    </div>
+
+                </div>
+
+                <!-- Submit -->
+                <div class="modal-footer">
+                    <button type="submit" id="update-role-modal-submit" class="btn btn-warning w-100">Update Role</button>
+                </div>
+
+            </form>
         </div>
     </div>
@@ -39,4 +99,17 @@
 
 <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
+
+<!-- Script to show modal by default -->
+<script>
+    document.addEventListener("DOMContentLoaded", function() {
+        const modalEl = document.getElementById('updateRoleModal');
+        const modal = new bootstrap.Modal(modalEl, {
+            backdrop: 'static',
+            keyboard: false
+        });
+        modal.show();
+    });
+</script>
+
 </body>
 </html>
Index: src/main/resources/templates/project_pages/project-roles.html
===================================================================
--- src/main/resources/templates/project_pages/project-roles.html	(revision d1ebd7639458b8fd0a3b45424adfb842401c4ac1)
+++ src/main/resources/templates/project_pages/project-roles.html	(revision 591e6827984f23e7df9735ec611ec49da3fa5486)
@@ -62,5 +62,5 @@
                         <button th:if="${isManager}" class="btn btn-warning btn-sm"
                                 data-bs-toggle="modal" th:data-bs-target="'#updateRoleModal-' + ${dvpr.getId()}">
-                            Edit
+                            <a th:href="@{/projects/{title}/roles/{roleName}/edit (title=${project.getTitle()},roleName=${dvpr.getName()})}">Edit</a>
                         </button>
                         <form th:if="${isManager}" th:action="@{/projects/{projectTitle}/roles/{roleName}/delete (projectTitle=${project.getTitle()}, roleName=${dvpr.getName()})}" method="post">
