--- /dev/null
+class Pettanr.Operator\r
+ \r
+ initialize: (operators) ->\r
+ @operators = operators\r
+ \r
+ #InstanceMethods\r
+ find_user: () ->\r
+ _.each @operators, (operator) ->\r
+ return operator if operator instanceof Pettanr.User\r
+ return operator.user if operator instanceof Pettanr.Author\r
+ return operator.user if operator instanceof Pettanr.Artist\r
+ nil\r
+ \r
+ find_author: () ->\r
+ _.each @operators, (operator) ->\r
+ return operator if operator instanceof Pettanr.Author\r
+ return operator.author if operator instanceof Pettanr.User\r
+ return operator.user.author if (operator instanceof Pettanr.Artist) and operator.user.author\r
+ nil\r
+ \r
+ find_artist: () ->\r
+ _.each @operators, (operator) ->\r
+ return operator.user.artist if (operator instanceof Pettanr.Author) and operator.user.artist\r
+ return operator.artist if operator instanceof Pettanr.User\r
+ return operator if operator instanceof Pettanr.Artist\r
+ nil\r
+ \r
+ find_admin: () ->\r
+ _.each @operators, (operator) ->\r
+ return operator if operator instanceof Pettanr.Admin\r
+ nil\r
+ \r
+ user: () ->\r
+ return @user if @user\r
+ @user = @find_user()\r
+ \r
+ author: () ->\r
+ return @author if @author\r
+ @author = @find_author()\r
+ \r
+ artist: () ->\r
+ return @artist if @artist\r
+ @artist = @find_artist()\r
+ \r
+ admin: () ->\r
+ return @admin if @admin\r
+ @admin = @find_admin()\r
+ \r
+ is_guest: () ->\r
+ true\r
+ \r
+ is_reader: () ->\r
+ _.each @operators, (operator) ->\r
+ return true if (operator instanceof Pettanr.Author) or (operator instanceof Pettanr.Artist) or (operator instanceof Pettanr.Admin) or (operator instanceof Pettanr.User)\r
+ false\r
+ \r
+ is_user: () ->\r
+ _.each @operators, (operator) ->\r
+ return true if (operator instanceof Pettanr.Author) or (operator instanceof Pettanr.Artist) or (operator instanceof Pettanr.User)\r
+ false\r
+ \r
+ is_resource_reader: () ->\r
+ _.each @operators, (operator) ->\r
+ return true if (operator instanceof Pettanr.Author) or (operator instanceof Artist) or (operator instanceof Pettanr.Admin) or (operator instanceof Pettanr.User) or (operator instanceof Pettanr.DemandUser)\r
+ false\r
+ \r
+ is_admin: () ->\r
+ _.each @operators, (operator) ->\r
+ return true if operator instanceof Pettanr.Admin\r
+ false\r
+ \r