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 fcb331336ea9c1d1908c977aa183995407d83dfc)
+++ src/main/java/com/db/finki/www/build_board/controller/thread_controller/ProjectController.java	(revision 8b7ce393c3f08bb30ae2bb04dd6f7ac003a8cd01)
@@ -5,4 +5,5 @@
 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.thread.impl.ProjectService;
@@ -17,6 +18,4 @@
 import org.springframework.web.servlet.mvc.support.RedirectAttributes;
 
-import java.util.ArrayList;
-import java.util.Arrays;
 import java.util.List;
 
@@ -30,9 +29,11 @@
     private final String DUPLICATED_TITLE_MSG="could not execute statement [ERROR: duplicate key value violates unique constraint";
     private final ProjectAccessManagementService  projectAccessManagementService;
+    private final AddRoleDTOEntitiesMapper mapper;
 
-    public ProjectController(ProjectService projectService, TagServiceImpl topicService, ProjectAccessManagementService projectAccessManagementService) {
+    public ProjectController(ProjectService projectService, TagServiceImpl topicService, ProjectAccessManagementService projectAccessManagementService, AddRoleDTOEntitiesMapper mapper) {
         this.projectService = projectService;
         this.tagService = topicService;
         this.projectAccessManagementService = projectAccessManagementService;
+        this.mapper = mapper;
     }
 
@@ -58,7 +59,6 @@
 
     @PostMapping("/{title}/roles/add")
-    public String addProjectRole(@PathVariable(name = "title") String title, @RequestBody AddRoleDTO addRoleDTO, RedirectAttributes redirectAttributes) {
-        projectAccessManagementService.addRole(addRoleDTO);
-
+    public String addProjectRole(@PathVariable(name = "title") String title, @RequestBody AddRoleDTO addRoleDTO) {
+        projectAccessManagementService.addRole(mapper.map(addRoleDTO));
         return  "redirect:/projects/" + title + "/roles";
     }
@@ -77,5 +77,4 @@
     @GetMapping("{title}/roles")
     public String getRolesPage(@PathVariable(name = "title") Project project, Model model){
-
         model.addAttribute("project", project);
         model.addAttribute("developersRoles",projectAccessManagementService.getRolesForMembersInProject(project));
Index: src/main/java/com/db/finki/www/build_board/dto/AddRoleDTO.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/dto/AddRoleDTO.java	(revision fcb331336ea9c1d1908c977aa183995407d83dfc)
+++ src/main/java/com/db/finki/www/build_board/dto/AddRoleDTO.java	(revision 8b7ce393c3f08bb30ae2bb04dd6f7ac003a8cd01)
@@ -17,6 +17,11 @@
     @JsonProperty
     String projectTitle;
+
+    @JsonProperty
+    List<String> globalPermissions;
+
     @JsonProperty
     List<PermissionResourceDTO> permissionResourceDTOS;
+
     @JsonProperty
     String permissionOverrideType;
Index: src/main/java/com/db/finki/www/build_board/dto/PermissionResourceWrapper.java
===================================================================
--- src/main/java/com/db/finki/www/build_board/dto/PermissionResourceWrapper.java	(revision fcb331336ea9c1d1908c977aa183995407d83dfc)
+++ src/main/java/com/db/finki/www/build_board/dto/PermissionResourceWrapper.java	(revision 8b7ce393c3f08bb30ae2bb04dd6f7ac003a8cd01)
@@ -15,5 +15,4 @@
     Permission permission;
     ProjectResource resource;
-
 }
 
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 fcb331336ea9c1d1908c977aa183995407d83dfc)
+++ src/main/java/com/db/finki/www/build_board/entity/access_managment/Permission.java	(revision 8b7ce393c3f08bb30ae2bb04dd6f7ac003a8cd01)
@@ -6,4 +6,5 @@
 import jakarta.persistence.Table;
 import lombok.Getter;
+import lombok.NoArgsConstructor;
 import lombok.Setter;
 
@@ -12,4 +13,5 @@
 @Getter
 @Setter
+@NoArgsConstructor
 public class Permission {
     @Id
@@ -20,3 +22,7 @@
     public static final String DELETE = "DELETE";
     public static final String CREATE = "CREATE";
+
+    public Permission(String name){
+        this.name = name;
+    }
 }
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 8b7ce393c3f08bb30ae2bb04dd6f7ac003a8cd01)
+++ src/main/java/com/db/finki/www/build_board/service/access_managment/AddRoleDTOEntities.java	(revision 8b7ce393c3f08bb30ae2bb04dd6f7ac003a8cd01)
@@ -0,0 +1,20 @@
+package com.db.finki.www.build_board.service.access_managment;
+
+import com.db.finki.www.build_board.common.enums.ProjectResourcePermissionOverrideType;
+import com.db.finki.www.build_board.dto.PermissionResourceWrapper;
+import com.db.finki.www.build_board.entity.access_managment.Permission;
+import com.db.finki.www.build_board.entity.thread.Project;
+import lombok.Getter;
+import lombok.Setter;
+
+import java.util.List;
+
+@Getter
+@Setter
+public class AddRoleDTOEntities {
+    String name;
+    Project project;
+    List<PermissionResourceWrapper> permissionResource;
+    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 8b7ce393c3f08bb30ae2bb04dd6f7ac003a8cd01)
+++ src/main/java/com/db/finki/www/build_board/service/access_managment/AddRoleDTOEntitiesMapper.java	(revision 8b7ce393c3f08bb30ae2bb04dd6f7ac003a8cd01)
@@ -0,0 +1,47 @@
+package com.db.finki.www.build_board.service.access_managment;
+
+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.PermissionResourceDTO;
+import com.db.finki.www.build_board.dto.PermissionResourceWrapper;
+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.thread.Project;
+import com.db.finki.www.build_board.service.thread.impl.ProjectService;
+import org.springframework.stereotype.Service;
+
+import java.util.List;
+
+@Service
+public class AddRoleDTOEntitiesMapper {
+    private final ProjectService projectService;
+
+    public AddRoleDTOEntitiesMapper(ProjectService projectService) {this.projectService = projectService;}
+
+    private Project findProject(String projectTitle){
+        return projectService.getByTitle(projectTitle) ;
+    }
+
+    private List<PermissionResourceWrapper> findPermissionResource(List<PermissionResourceDTO> resourceDTOS){
+        return resourceDTOS.stream().map(d -> new PermissionResourceWrapper(
+                new Permission(d.getPermissionName().toUpperCase()),
+                new ProjectResource(d.getProjectResourceID())
+        )).toList();
+    }
+
+    private List<Permission> findGlobalPermissions(List<String> global){
+        return global.stream().map(String::toUpperCase).map(Permission::new).toList();
+    }
+
+    public AddRoleDTOEntities map(AddRoleDTO dto) {
+        AddRoleDTOEntities dto2 = new AddRoleDTOEntities();
+
+        dto2.setName(dto.getName());
+        dto2.setProject(findProject(dto.getProjectTitle()));
+        dto2.setPermissionResource(findPermissionResource(dto.getPermissionResourceDTOS()));
+        dto2.setProjectResourcePermissionOverrideType(ProjectResourcePermissionOverrideType.valueOf(dto.getPermissionOverrideType()));
+        dto2.setGlobalPermissions(findGlobalPermissions(dto.getGlobalPermissions()));
+
+        return dto2;
+    }
+}
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 fcb331336ea9c1d1908c977aa183995407d83dfc)
+++ src/main/java/com/db/finki/www/build_board/service/access_managment/ProjectAccessManagementService.java	(revision 8b7ce393c3f08bb30ae2bb04dd6f7ac003a8cd01)
@@ -1,16 +1,11 @@
 package com.db.finki.www.build_board.service.access_managment;
 
-import com.db.finki.www.build_board.dto.AddRoleDTO;
-import com.db.finki.www.build_board.dto.MembersPerRoleWrapper;
+import com.db.finki.www.build_board.common.enums.ProjectResourcePermissionOverrideType;
 import com.db.finki.www.build_board.dto.PermissionResourceWrapper;
-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.access_managment.UsersProjectRoles;
+import com.db.finki.www.build_board.entity.access_managment.*;
 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;
 import com.db.finki.www.build_board.entity.thread.Project;
-import com.db.finki.www.build_board.repository.DeveloperRepository;
 import com.db.finki.www.build_board.repository.access_managment.ProjectRolePermissionResourceOverrideRepository;
 import com.db.finki.www.build_board.repository.access_managment.ProjectRoleRepository;
@@ -22,5 +17,4 @@
 import java.util.ArrayList;
 import java.util.List;
-import java.util.stream.Collectors;
 
 @Service
@@ -32,15 +26,24 @@
     private final UserProjectRoleRepository userProjectRoleRepository;
 
-    public ProjectAccessManagementService(ProjectRoleRepository projectRoleRepository,
-                                          ProjectRolePermissionRepository projectRolePermissionRepository,
-                                          ProjectRolePermissionResourceOverrideRepository projectRolePermissionResourceOverrideRepository, UserProjectRoleRepository userProjectRoleRepository) {
+    public ProjectAccessManagementService(
+            ProjectRoleRepository projectRoleRepository,
+            ProjectRolePermissionRepository projectRolePermissionRepository,
+            ProjectRolePermissionResourceOverrideRepository projectRolePermissionResourceOverrideRepository, UserProjectRoleRepository userProjectRoleRepository
+                                         ) {
         this.projectRoleRepository = projectRoleRepository;
-        this.projectRolePermissionResourceOverrideRepository = projectRolePermissionResourceOverrideRepository;
+        this.projectRolePermissionResourceOverrideRepository =
+                projectRolePermissionResourceOverrideRepository;
         this.projectRolePermissionRepository = projectRolePermissionRepository;
         this.userProjectRoleRepository = userProjectRoleRepository;
     }
 
-    public boolean hasPermissionToAccessResource(int userId, String permission, int resourceId, int projectId) {
-        return projectRolePermissionResourceOverrideRepository.hasPermissionForResource(projectId, userId, permission, resourceId);
+    public boolean hasPermissionToAccessResource(
+            int userId, String permission, int resourceId,
+            int projectId
+                                                ) {
+        return projectRolePermissionResourceOverrideRepository.hasPermissionForResource(projectId,
+                userId,
+                permission,
+                resourceId);
     }
 
@@ -50,25 +53,92 @@
     }
 
+    private List<ProjectRolePermission> mapGlobalsToProjectRolePermissions(
+            ProjectRole role,
+            List<Permission> permissions
+                                                                          ) {
+        return permissions
+                .stream()
+                .map(p -> new ProjectRolePermission(
+                        new ProjectRolePermissionId(
+                                p,
+                                role
+                        ),
+                        ProjectResourcePermissionOverrideType.EXCLUDE.name()
+                ))
+                .toList();
+    }
+
+    private List<ProjectRolePermission> mapPerResourceToProjectRolePermissions(
+            ProjectRole role,
+            List<PermissionResourceWrapper> permissions,
+            ProjectResourcePermissionOverrideType overrideType
+                                                                              ) {
+        return permissions
+                .stream()
+                .map(p -> new ProjectRolePermission(
+                        new ProjectRolePermissionId(
+                                p.getPermission(),
+                                role
+                        ),
+                        overrideType.name()
+                ))
+                .toList();
+    }
+
+    private List<ProjectRolePermissionResourceOverride> mapToResourceOverrides(
+            List<ProjectResource> resources,
+            List<ProjectRolePermission> rolePermissions
+
+                                                                              ) {
+       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)
+                           )
+                   )
+                                                     );
+       }
+
+       return overrides;
+    }
+
+    private List<ProjectResource> getResources(List<PermissionResourceWrapper> rolePermissions) {
+        return rolePermissions.stream().map(PermissionResourceWrapper::getResource).toList();
+    }
+
     @Transactional
-    public void addRole(AddRoleDTO addRoleDTO) {
-        ProjectRole projectRole = new ProjectRole(new ProjectRoleId(addRoleDTO.getName(), addRoleDTO.getProject()));
-        projectRoleRepository.save(projectRole);
+    public void addRole(AddRoleDTOEntities addRoleDTO) {
+        ProjectRole role = projectRoleRepository.save(
+                new ProjectRole(
+                        new ProjectRoleId(
+                                addRoleDTO.getName(),
+                                addRoleDTO.getProject()
+                        )
+                )
+                                                     );
 
-        List<PermissionResourceWrapper> permissionResourceWrapperList = addRoleDTO.getPermissionResource();
-        List<ProjectRolePermission> projectRolePermissions = permissionResourceWrapperList.stream().map(PermissionResourceWrapper::getPermission)
-                .map(permission -> new ProjectRolePermission(new ProjectRolePermissionId(permission, projectRole),
-                        addRoleDTO.getProjectResourcePermissionOverrideType().name())).toList();
+        //GLOBALS
+        projectRolePermissionRepository.saveAll(mapGlobalsToProjectRolePermissions(role,
+                addRoleDTO.getGlobalPermissions()
+                                                                                  ));
 
-        projectRolePermissionRepository.saveAll(projectRolePermissions);
+        //LOCALS
+        //Bitno e po red posle vo role_permissions_overrides da gi klavash
+        List<ProjectRolePermission> entities = mapPerResourceToProjectRolePermissions(
+                role,
+                addRoleDTO.getPermissionResource(),
+                addRoleDTO.getProjectResourcePermissionOverrideType()
+                                                                                     );
+        projectRolePermissionRepository.saveAll(entities);
 
-        List<ProjectRolePermissionResourceOverride> permissionOverrides = permissionResourceWrapperList.stream().map(pr ->
-                new ProjectRolePermissionResourceOverride(
-                    new ProjectRolePermissionResourceOverrideId(new ProjectRolePermission(new ProjectRolePermissionId(pr.getPermission(), projectRole)),
-                        pr.getResource()
-                )
-        )).toList();
-
-        projectRolePermissionResourceOverrideRepository.saveAll(permissionOverrides);
-
+        //role_permissions_overrides
+        projectRolePermissionResourceOverrideRepository.saveAll(mapToResourceOverrides(
+                getResources(addRoleDTO.getPermissionResource()),
+                entities
+                                                                                      ));
     }
 }
Index: src/main/resources/templates/project_pages/project-roles.html
===================================================================
--- src/main/resources/templates/project_pages/project-roles.html	(revision fcb331336ea9c1d1908c977aa183995407d83dfc)
+++ src/main/resources/templates/project_pages/project-roles.html	(revision 8b7ce393c3f08bb30ae2bb04dd6f7ac003a8cd01)
@@ -117,5 +117,5 @@
                                            th:id="${permission}"
                                            th:name="'global-permission'"
-                                           th:value="${permission}">
+                                           th:value="${permission.toLowerCase()}">
 <!--                                           th:checked="${permissionDefaultSelected.contains(permission.name)}">-->
                                     <label class="form-check-label" th:for="${permission}" th:text="${permission.toLowerCase() + ' channels'}">Permission</label>
@@ -135,7 +135,7 @@
                                                    type="checkbox"
                                                    th:id="${permission + '-' + channel.getProjectResource().getId()}"
-                                                   th:name="'per-resource-permission"
-                                                   th:attr="data-resourceId=${channel.getProjectResource().getId()}"
-                                                   th:value="${channel.getProjectResource().getId()}"
+                                                   name="per-resource-permission"
+                                                   th:value="${permission}"
+                                                   th:attr="data-resource-id=${channel.getProjectResource().getId()}"
                                                    th:checked="${overrideTypeDefault == 'EXCLUDE'}">
                                             <label class="form-check-label"
@@ -159,38 +159,65 @@
     </div>
 </div>
-
-
-<!--TODO submit na add modalot da e ustvari link (a tag) so href do add role endpoint, ko ke go cliknis pred da sa pustit, sa triggervite
-javascriptot so mu klavat fakticki request bodyto ko query param vo forma na json string, na backend so object mapper go deserijalizirivime vo AddRoleDTO-->
 <script>
-
-    document.getElementById('add-role-form').addEventListener('submit', function(event) {
-        event.preventDefault(); // Prevent default form submission
-
-        const formData = new FormData(this);
-
-        // Get individual values
-        const roleName = formData.get('roleName');
-        const overrideType = formData.get('overrideType');
-
-        const addRoleDto = { name: roleName,projectTitle: document.body.dataset.projectTitle}
-
-        // Get all permissions (multiple checkboxes with same name)
-        const perResourcePermissions = formData.getAll('per-resource-permission');
-
-        // String permissionName;
-        // int projectResourceID;
-
-        addRoleDto['permissionResourceDTOS'] = perResourcePermissions.map(pr => ({permissionName: pr.}))
-
-        console.log('Role Name:', roleName);
-        console.log('Override Type:', overrideType);
-        console.log('Permissions:', perResourcePermissions);
-
-        // Convert to object if needed
-        const formObject = Object.fromEntries(formData.entries());
-        console.log('Form as object:', formObject);
+    const getCheckedValues = (inputs) => {
+        const values = []
+        for(let i of inputs){
+            if(i.checked)
+                values.push(i.value)
+        }
+        return values
+    }
+
+    const processPerResourcePermissions = (inputs) => {
+        const values = []
+        for(let i of inputs){
+            if(i.checked){
+                values.push({
+                    name: i.value,
+                    resourceId: i.dataset.resourceId
+                })
+            }
+        }
+        return values
+    }
+
+    const getProjectTitle = () => {
+        return document.body.dataset.projectTitle
+    }
+
+    document.getElementById('add-role-form').addEventListener('submit', async function(event) {
+        event.preventDefault()
+        const roleNameInput = document.querySelector("#roleName")
+        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 roleName = roleNameInput.value
+        const includeExcludeDecided = getCheckedValues(includeExcludeInput)[0]
+        const globalSelectedPermissions = getCheckedValues(globalPermissions)
+        const perResourceSelectedPermissions = processPerResourcePermissions(perResourcePermissions)
+        const projectTitle = getProjectTitle()
+
+        const response = await fetch(`/projects/${projectTitle}/roles/add`, {
+            method: "POST",
+            headers: {
+                "Content-Type" : "application/json",
+            },
+            body: JSON.stringify({
+                name: roleName,
+                projectTitle: projectTitle,
+                permissionOverrideType: includeExcludeDecided,
+                globalPermissions: globalSelectedPermissions,
+                permissionResourceDTOS: perResourceSelectedPermissions.map(p => ({
+                    permissionName: p.name,
+                    projectResourceID: p.resourceId
+                }))
+            }),
+            credentials: "include"
+        })
+
+        if(!response.ok)
+            throw new Error(data);
     });
-
 
     document.getElementById("add-role-modal-submit").addEventListener('click',() => {
