Exemple #1
0
        public static List <PermissionsForRoleDTO> GetPermissionsByRoleID(int roleID)
        {
            var data = new List <PermissionsForRoleDTO>();
            var permissionsForRoleDTO = new PermissionsForRoleDTO();

            using (SqlConnection con = new SqlConnection(Helper.Connection())) {
                using (SqlCommand cmd = new SqlCommand("GetPermissionsByRoleID", con)) {
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.Parameters.AddWithValue("@RoleID", roleID);
                    con.Open();

                    /* Create instance of DataAdapter to read multiple DataSet */
                    var da = new SqlDataAdapter(cmd);
                    var ds = new DataSet();
                    da.Fill(ds);

                    /* reading multiple DataSet */
                    foreach (DataRow item in ds.Tables[0].Rows)
                    {
                        permissionsForRoleDTO.RoleID          = item["RoleID"] == DBNull.Value ? 0 : Convert.ToInt32(item["RoleID"]);
                        permissionsForRoleDTO.RoleName        = item["RoleName"] == DBNull.Value ? "" : Convert.ToString(item["RoleName"]);
                        permissionsForRoleDTO.RoleDescription = item["RoleDescription"] == DBNull.Value ? "" : Convert.ToString(item["RoleDescription"]);

                        foreach (DataRow permissionItem in ds.Tables[1].Rows)
                        {
                            permissionsForRoleDTO.PermissionsWithIsAssigned.Add(new PermissionWithIsAssigned()
                            {
                                ID          = permissionItem["ID"] == DBNull.Value ? 0 : Convert.ToInt32(permissionItem["ID"]),
                                Name        = permissionItem["Name"] == DBNull.Value ? "" : Convert.ToString(permissionItem["Name"]),
                                Description = permissionItem["Description"] == DBNull.Value ? "" : Convert.ToString(permissionItem["Description"]),
                                IsAssigned  = permissionItem["IsAssigned"] == DBNull.Value ? false : Convert.ToBoolean(permissionItem["IsAssigned"])
                            });
                        }
                        data.Add(permissionsForRoleDTO);
                    }
                }
            }

            return(data);
        }
        public async Task <IActionResult> EditPermissionsOfRole(PermissionsForRoleDTO model)
        {
            var roleManager     = _serviceProvider.GetRequiredService <RoleManager <ApplicationRole> >();
            var rolePermissions = new List <AssignPermissionsToRole>();

            var permissionIDs = new List <string>();

            foreach (var permission in model.PermissionsWithIsAssigned)
            {
                if (permission.IsAssigned)
                {
                    permissionIDs.Add(permission.ID.ToString());
                }
            }

            var permissionIDsToString = string.Join(",", permissionIDs);

            var modelToList = new List <PermissionsForRoleDTO> {
                model
            };

            rolePermissions = modelToList.GroupBy(x => new { x.RoleID }).Select(y =>
                                                                                new AssignPermissionsToRole {
                RoleID        = y.Key.RoleID,
                PermissionIDs = permissionIDsToString
            }).ToList();

            AdminRepository.AssignPermissionsToRole(rolePermissions);

            // Get all permissions affected by rights change
            var rightsHavingPermissions = AdminRepository.GetRightsHavingPermissions(permissionIDsToString);

            var rightIDsList = new List <string>();

            var applicationRoleItem = new ApplicationRole(model.RoleName, model.RoleID);

            foreach (var item in rightsHavingPermissions)
            {
                rightIDsList.Add(item.ID.ToString());
            }

            // Get all RightIDs
            var allRightIDs = AdminRepository.GetAllRightIDs();

            // Get Application Role
            var applicationRole = roleManager.FindByNameAsync(model.RoleName).Result;

            // modify identity table aspnetroleclaims
            foreach (var rightID in allRightIDs)
            {
                if (rightIDsList.Contains(rightID))
                {
                    await roleManager.AddClaimAsync(applicationRole, new Claim(AdminRepository.GetRightNameByRightID(int.Parse(rightID)), "True"));
                }
                else
                {
                    await roleManager.RemoveClaimAsync(applicationRole, new Claim(AdminRepository.GetRightNameByRightID(int.Parse(rightID)), "True"));
                }
            }
            await HttpContext.RefreshLoginAsync();

            return(RedirectToAction("Index"));
        }