示例#1
0
        public static List <RightsForPermissionDTO> GetRightsByPermissionID(int permissionID)
        {
            var data = new List <RightsForPermissionDTO>();
            var rightsForPermissionDTO = new RightsForPermissionDTO();

            using (SqlConnection con = new SqlConnection(Helper.Connection())) {
                using (SqlCommand cmd = new SqlCommand("GetRightsByPermissionID", con)) {
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.Parameters.AddWithValue("@PermissionID", permissionID);
                    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)
                    {
                        rightsForPermissionDTO.PermissionID          = item["PermissionID"] == DBNull.Value ? 0 : Convert.ToInt32(item["PermissionID"]);
                        rightsForPermissionDTO.PermissionName        = item["PermissionName"] == DBNull.Value ? "" : Convert.ToString(item["PermissionName"]);
                        rightsForPermissionDTO.PermissionDescription = item["PermissionDescription"] == DBNull.Value ? "" : Convert.ToString(item["PermissionDescription"]);

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

            return(data);
        }
        public async Task <IActionResult> EditRightsOfPermission(RightsForPermissionDTO model)
        {
            var roleManager        = _serviceProvider.GetRequiredService <RoleManager <ApplicationRole> >();
            var permissionRights   = new List <AssignRightsToPermission>();
            var permissionRightIDs = new List <string>();

            foreach (var right in model.RightsWithIsAssigned)
            {
                if (right.IsAssigned)
                {
                    permissionRightIDs.Add(right.ID.ToString());
                }
            }

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

            permissionRights = modelToList.GroupBy(x => new { x.PermissionID }).Select(y =>
                                                                                       new AssignRightsToPermission {
                PermissionID = y.Key.PermissionID,
                RightIDs     = string.Join(",", permissionRightIDs)
            }).ToList();
            AdminRepository.AssignRightsToPermission(permissionRights);

            // Get all roles affected by permissions change
            var rolesHavingPermission = AdminRepository.GetRolesHavingPermission(model.PermissionID);

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

            // Foreach role with Permission model.PermissionID
            foreach (var roleItem in rolesHavingPermission)
            {
                var assignRightsToRole = new AssignRightsToRole {
                    RoleID = roleItem.ID, RightIDs = string.Join(",", permissionRightIDs)
                };
                var applicationRoleItem = new ApplicationRole(roleItem.Name, roleItem.ID);

                var listAssignRightsToRole = new List <AssignRightsToRole> {
                    assignRightsToRole
                };
                // Update RoleRights Table - Delete all values where Role ID is RoleID and Insert RoleRights model
                AdminRepository.AssignRightsToRole(listAssignRightsToRole);

                // Get Application Role
                var applicationRole = roleManager.FindByNameAsync(roleItem.Name).Result;

                // Modify Identity Table AspNetRoleClaims
                foreach (var rightID in allRightIDs)
                {
                    if (permissionRightIDs.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"));
        }