The PolicyBook should make DAI transfers inside the contract
The `PolicyBook` contract gives full allowance over DAI tokens to the other contracts:\\n```\\nfunction approveAllDaiTokensForStakingAndVotingAndTransferOwnership() internal {\\n  daiToken.approve(address(bmiDaiStaking), MAX\\_INT);   \\n  daiToken.approve(address(claimVoting), MAX\\_INT);    \\n\\n  transferOwnership(address(bmiDaiStaking));\\n}\\n```\\n\\nThat behavior is dangerous because it's hard to keep track of and control the contract's DAI balance. And it's also hard to track in the code where the balance of the `PolicyBook` can be changed from.
It's better to perform all the transfers inside the `PolicyBook` contract. So if the `bmiDaiStaking` and the `claimVoting` contracts need DAI tokens from the `PolicyBook`, they should call some function of the `PolicyBook` to perform transfers.
```\\nfunction approveAllDaiTokensForStakingAndVotingAndTransferOwnership() internal {\\n  daiToken.approve(address(bmiDaiStaking), MAX\\_INT);   \\n  daiToken.approve(address(claimVoting), MAX\\_INT);    \\n\\n  transferOwnership(address(bmiDaiStaking));\\n}\\n```\\n