public void SetRoleCapabilities(int roleId, int[] capabilityIds)
        {
            //if there are no caps, it means all caps have been removed
            if (capabilityIds == null || !capabilityIds.Any())
            {
                _roleCapabilityService.Delete(x => x.RoleId == roleId);
                return;
            }
            //get all the caps of current role
            var roleCapabilities = _roleCapabilityService.Get(x => x.RoleId == roleId).ToList();
            var newCaps          = new List <RoleCapability>();

            foreach (var cid in capabilityIds)
            {
                //if the cap is already there, no need to proceed
                if (roleCapabilities.Any(x => x.CapabilityId == cid))
                {
                    continue;
                }
                //add this new role
                newCaps.Add(new RoleCapability()
                {
                    RoleId       = roleId,
                    CapabilityId = cid
                });
            }
            //insert new roles
            _roleCapabilityService.Insert(newCaps.ToArray());
            //delete other roles
            foreach (var capToRemove in roleCapabilities.Where(x => !capabilityIds.Contains(x.CapabilityId)))
            {
                _roleCapabilityService.Delete(capToRemove);
            }
        }