Hi, Haven't tried it yet, but I think the code in Catalyst should look like:
my $edited = $c->model('DB::User')->find({id=>$target_user_id}); my $ancestor = $c->model('DB::User')->find({id=>$edited->{parent_id}}); my $found = 0; while ($found==false && $ancestor) { if ($ancestor == $c.user.user_id) $found= true; $ancestor = $c->model('DB::User')->find({id=>$edited->{parent_id}}); } return $found; You can push the ancestors into a list if you want to have a list of users who can edit $target_user_id. But I am not really sure if you can make a top-to-bottom approach with this one. (I assume top-to-bottom means searching from all ancestors instead of the user that you want to edit) Sindharta jakac <[EMAIL PROTECTED]> wrote: Yes this seems fine but how to code this in Catalyst? :) And another thing - if I want to list users that certain this_user can edit, I would need to go through the whole list and check for each user if "this_user" is one of the (grand)parents. Your approach is bottom-to-top and I now I am also looking for top-to-bottom... I think I can manage to write one of these functions by myself if someone would just give me an example how to write one of these.. [EMAIL PROTECTED] wrote: Hi, Maybe an algorithmic approach ? -- ancestor = edited.parent; found = false; while (found==false and ancestor!=null) { if (ancestor == current_user) found= true; ancestor = ancestor.parent } return found; -- I came from C++ background rather than Perl, so I am sorry if it looks more like C++ but I hope you got the idea. Not that there's a bit of recursive going on there. Sindharta jakac <[EMAIL PROTECTED]> wrote: Hello! I need a help on building a model for user that has a permission to edit other users that were created by this user or any of his children, grandchildren etc. (difficult sentence, I know) To make this a little more understandable here's my database table: - user_id - username - password - various other data such as fname, lname, address etc. - parent_id Column "parent_id" has a value of "user_id" that created one user. There is also a "superadministrator" with parent_id '0' that can edit everybody. Now I would like to build a model that I can use in my controllers like: if ( user_id is child,grandchild,gradgrandchild.... of logged in $c->user ) { # has permisson to edit } else { # doesn't have a permission to edit } Example: - superadmin |__- foo |__- bar |____- john |______- doe In this example: - superadmin can edit anybody, - bar can edit john & doe - john can edit only doe - foo can't edit anybody since he has no children And there can be unlimited levels of users... There is no problem with permission to edit first child since I can just compare logged in user's ID with edited user's parent_id but when edited user is grandchild, grandgrandchild, (grand * n) child of $c->user then I need some kind of model to return true/false value. I've never done that and I am also new to Catalyst so any help would be appreciated. Thank you! JakaC. _______________________________________________ List: Catalyst@lists.scsys.co.uk Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/ Dev site: http://dev.catalyst.perl.org/ --------------------------------- Power up the Internet with Yahoo! Toolbar. --------------------------------- _______________________________________________ List: Catalyst@lists.scsys.co.uk Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/ Dev site: http://dev.catalyst.perl.org/ _______________________________________________ List: Catalyst@lists.scsys.co.uk Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/ Dev site: http://dev.catalyst.perl.org/ --------------------------------- Power up the Internet with Yahoo! Toolbar.
_______________________________________________ List: Catalyst@lists.scsys.co.uk Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/ Dev site: http://dev.catalyst.perl.org/