[Catalyst] Users hierarchy

sindharta_tanuwijaya at yahoo.co.jp sindharta_tanuwijaya at yahoo.co.jp
Wed Jun 4 02:52:53 BST 2008


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 <jakac at iprom.si> 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.. 
 
 sindharta_tanuwijaya at yahoo.co.jp 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 <jakac at iprom.si> 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 at 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 at 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 at 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.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.scsys.co.uk/pipermail/catalyst/attachments/20080604/404bf4cf/attachment.htm


More information about the Catalyst mailing list