Anyone is able to mint NFTs by calling mintNFTsForLM
The contract `LiquidityMiningNFT` has the method `mintNFTsForLM`.\\n```\\nfunction mintNFTsForLM(address \\_liquidiyMiningAddr) external {\\n    uint256[] memory \\_ids = new uint256[](NFT\\_TYPES\\_COUNT);\\n    uint256[] memory \\_amounts = new uint256[](NFT\\_TYPES\\_COUNT);\\n\\n    \\_ids[0] = 1;\\n    \\_amounts[0] = 5;\\n\\n    \\_ids[1] = 2;\\n    \\_amounts[1] = 1 \\* LEADERBOARD\\_SIZE;\\n\\n    \\_ids[2] = 3;\\n    \\_amounts[2] = 3 \\* LEADERBOARD\\_SIZE;\\n\\n    \\_ids[3] = 4;\\n    \\_amounts[3] = 6 \\* LEADERBOARD\\_SIZE;\\n\\n    \\_mintBatch(\\_liquidiyMiningAddr, \\_ids, \\_amounts, "");\\n}\\n```\\n\\nHowever, this contract does not have any kind of special permissions to limit who is able to mint tokens.\\nAn attacker could call `LiquidityMiningNFT.mintNFTsForLM(0xhackerAddress)` to mint tokens for their address and sell them on the marketplace. They are also allowed to mint as many tokens as they want by calling the method multiple times.
Add some permissions to limit only some actors to mint tokens.
```\\nfunction mintNFTsForLM(address \\_liquidiyMiningAddr) external {\\n    uint256[] memory \\_ids = new uint256[](NFT\\_TYPES\\_COUNT);\\n    uint256[] memory \\_amounts = new uint256[](NFT\\_TYPES\\_COUNT);\\n\\n    \\_ids[0] = 1;\\n    \\_amounts[0] = 5;\\n\\n    \\_ids[1] = 2;\\n    \\_amounts[1] = 1 \\* LEADERBOARD\\_SIZE;\\n\\n    \\_ids[2] = 3;\\n    \\_amounts[2] = 3 \\* LEADERBOARD\\_SIZE;\\n\\n    \\_ids[3] = 4;\\n    \\_amounts[3] = 6 \\* LEADERBOARD\\_SIZE;\\n\\n    \\_mintBatch(\\_liquidiyMiningAddr, \\_ids, \\_amounts, "");\\n}\\n```\\n