There are several factors to consider when deciding what to compute on the client side and what on the server side. A lot depends on the type of the game and how to handle lag, packet loss, etc. Let us assume that a client determines when an enemy bullet collides with it. The positive thing with this approach is that a player is hit only if the player's character and the bullet collide on the player's screen. However, due to lag, an opponent might observe that a bullet hits another player but on that player's screen the bullet misses. This might be annoying to the opponent as the player seems to "tank" the bullet hit.
Things are not perfect when a server decides when a bullet hits either. Now it can happen that on your screen it seems that you masterfully dodged a bullet but a fraction of a second later you die as your position on the server was slightly different that on your screen and the server decides that you were hit. Personally I'm more OK with other players "tanking" than myself dying without apparent reason.
Of course the game speed affects a lot how much the latency between a client and a server affects the game-play. I guess testing different possibilities is the only good way to determine what works for your game and what does not. It is possible to simulate different amounts of lag and it is possible to compensate for lag (google lag compensation, for example).
One additional thing to notice is that if a server handles all the computation (positions etc.) it can result in jerky or delayed movement of game objects. For example, if some position update packets are lost or delayed, the game object might seem to jump from place to place if the client is not allowed to interpolate the position of the object. Therefore a client should at least be able to handle player's position updates locally. Otherwise there will be a delay between using the controls and seeing the effect on the screen. Of course if the game-play is really slow or all players are on the same LAN this might not be an issue.
Of course the danger of allowing a client to handle most of the logic is that it is easier to create cheats for the game. However, cheats usually start to appear only after a game gains some popularity. Therefore I wouldn't initially worry about cheating and instead concentrate on making the game-play as fun as possible.