I checked out DBIx::OO::Tree also but using this module would mean
that I would have to change my table schema (add columns
parent,lft,rgt,mvg)..
I don't see why this is necessary since the whole thing needs only two
colums -
user_id and parent_id ...? If I know a user_id then I can always get all
users
where their parent_id = this_user_id etc.
Like I said in my previous postings - I really don't want to change my
database
schema because a lot of other applications depend on it. There is no problem
adding columns lft,rgt and mvg but if I change my primary key from
"user_id" to "id" and change my column "parent_id" to "parent" like this
module
requires it would mean changing a lot of other older applications which
depend
on this database...
vb wrote:
perhaps DBIx::OO::Tree could help you?
On Wed, Jun 4, 2008 at 1:53 PM, jakac <[EMAIL PROTECTED]
<mailto:[EMAIL PROTECTED]>> wrote:
I also discovered DBIx::Class::Tree::AdjacencyList
Using this module I can define my parent_id in my Users.pm schema
like:
__PACKAGE__->parent_column('parent_id');
And then I can get all children of one user like:
my $user_id = 7;
my $thisuser = $c->model('MyDB::Users')->find({ user_id=> $user_id });
my $children = $thisuser->children();
But this gives me only a list of children one level under
$thisuser and it's the same
as executing only:
my $children = $c->model('MyDB::Users')->find({ parent_id=>
$user_id });
So it's no big deal.. Still this module is OK because it maintains
consistency of the
tree when you delete one branch for example, but I still haven't
found the solution I
need - listing all children in all levels under one parent as well
as checking if
a single user is a (grand)parent who can edit a certain user...
When listing all children it would also be necessary if I could
specify order (e.g. order by username)
and also limit and offset for pagination on website...
jakac wrote:
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!
[EMAIL PROTECTED]
<mailto:[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> <mailto:[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]
<mailto:[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]> <mailto:[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: [email protected]
<mailto:[email protected]>
Listinfo:
http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive:
http://www.mail-archive.com/[email protected]/
Dev site: http://dev.catalyst.perl.org/
------------------------------------------------------------------------
Power up the Internet with Yahoo! Toolbar.
<http://pr.mail.yahoo.co.jp/toolbar/>
------------------------------------------------------------------------
_______________________________________________
List: [email protected] <mailto:[email protected]>
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive:
http://www.mail-archive.com/[email protected]/
Dev site: http://dev.catalyst.perl.org/
_______________________________________________
List: [email protected]
<mailto:[email protected]>
Listinfo:
http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive:
http://www.mail-archive.com/[email protected]/
Dev site: http://dev.catalyst.perl.org/
------------------------------------------------------------------------
Power up the Internet with Yahoo! Toolbar.
<http://pr.mail.yahoo.co.jp/toolbar/>
------------------------------------------------------------------------
_______________________________________________
List: [email protected] <mailto:[email protected]>
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/[email protected]/
Dev site: http://dev.catalyst.perl.org/
------------------------------------------------------------------------
_______________________________________________ List:
[email protected] <mailto:[email protected]>
Listinfo:
http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive:
http://www.mail-archive.com/[email protected]/ Dev site:
http://dev.catalyst.perl.org/
_______________________________________________
List: [email protected] <mailto:[email protected]>
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive:
http://www.mail-archive.com/[email protected]/
Dev site: http://dev.catalyst.perl.org/
------------------------------------------------------------------------
_______________________________________________
List: [email protected]
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/[email protected]/
Dev site: http://dev.catalyst.perl.org/
_______________________________________________
List: [email protected]
Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
Searchable archive: http://www.mail-archive.com/[email protected]/
Dev site: http://dev.catalyst.perl.org/