[Catalyst] Users hierarchy
jakac
jakac at iprom.si
Wed Jun 4 08:16:12 BST 2008
Hi,
Ok, I understand the concept of walking through this DB::User model but
another
question is - where should I put this function and how should I call it
from my controllers?
Until now I only used basic integrated functions that are integrated in
catalyst & its plugins
so I am not familiar with all the concepts behind catalyst custom models.
Thanx!
sindharta_tanuwijaya at yahoo.co.jp wrote:
> 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.
>> <http://pr.mail.yahoo.co.jp/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.
> <http://pr.mail.yahoo.co.jp/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/
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.scsys.co.uk/pipermail/catalyst/attachments/20080604/102990f0/attachment.htm
More information about the Catalyst
mailing list