Quandle Quandary Episode I: Identifying Finite Quandles
Haskell, 100 bytes

This answer uses transposed input.

q m=and$(elem&lt;$&gt;v&lt;*&gt;m)++[a#a==a&amp;&amp;a#b#c==a#c#(b#c)|a&lt;-v,b&lt;-v,c&lt;-v]where v=[0..length m-1];i#j=m!!j!!i


Seems like I can't use a pattern guard to bind an infix operator, so I'm using where in this case. 

(First version was 108 bytes but missed idempotency test, fixed version was 120 bytes, later versions had 108, 103 and 98 bytes but I had to realize thanks to @nimi that they were all wrong: of course I need to do the right-divisibility test (which implies closedness) before doing any dangerous !! operations,  but I could still use most of my later golfing ideas and with one more, it was 102 bytes, now improved by changing the operand order of # (which is nicer anyway to compensate the transposition) to make better use of its associating to the left)

Use like this:

*Main&gt; q [[0,1,2,3],[0,1,3,2],[1,0,2,3],[0,1,2,3]]
False