Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
bugzilla
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
etersoft
bugzilla
Commits
dedbe7d0
Commit
dedbe7d0
authored
Feb 25, 2005
by
mkanat%kerio.com
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Bug 279693: Move UserCanBlessGroup() into a Bugzilla::User function
Patch By Max Kanat-Alexander <mkanat@kerio.com> r=LpSolit, a=myk
parent
bd2fa9ea
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
55 additions
and
58 deletions
+55
-58
User.pm
Bugzilla/User.pm
+52
-25
editusers.cgi
editusers.cgi
+2
-2
globals.pl
globals.pl
+0
-30
userprefs.cgi
userprefs.cgi
+1
-1
No files found.
Bugzilla/User.pm
View file @
dedbe7d0
...
...
@@ -247,6 +247,38 @@ sub groups {
return
$self
->
{
groups
};
}
sub
bless_groups
{
my
$self
=
shift
;
return
$self
->
{
bless_groups
}
if
defined
$self
->
{
bless_groups
};
return
{}
unless
$self
->
id
;
my
$dbh
=
Bugzilla
->
dbh
;
# Get all groups for the user where:
# + They have direct bless privileges
# + They are a member of a group that inherits bless privs.
# Because of the second requirement, derive_groups must be up-to-date
# for this to function properly in all circumstances.
my
$bless_groups
=
$dbh
->
selectcol_arrayref
(
q{SELECT DISTINCT groups.name, groups.id
FROM groups, user_group_map, group_group_map AS ggm
WHERE user_group_map.user_id = ?
AND ((user_group_map.isbless = 1
AND groups.id=user_group_map.group_id)
OR (groups.id = ggm.grantor_id
AND ggm.grant_type = }
.
GROUP_BLESS
.
q{ AND user_group_map.group_id = ggm.member_id
AND user_group_map.isbless = 0))}
,
{
Columns
=>
[
1
,
2
]
},
$self
->
{
id
});
# The above gives us an arrayref [name, id, name, id, ...]
# Convert that into a hashref
my
%
bless_groups_hashref
=
@$bless_groups
;
$self
->
{
bless_groups
}
=
\%
bless_groups_hashref
;
return
$self
->
{
bless_groups
};
}
sub
in_group
{
my
(
$self
,
$group
)
=
@_
;
...
...
@@ -467,32 +499,15 @@ sub derive_groups {
sub
can_bless
{
my
$self
=
shift
;
return
$self
->
{
can_bless
}
if
defined
$self
->
{
can_bless
};
return
0
unless
$self
->
id
;
my
$dbh
=
Bugzilla
->
dbh
;
# First check if the user can explicitly bless a group
my
$res
=
$dbh
->
selectrow_arrayref
(
q{SELECT 1
FROM user_group_map
WHERE user_id=?
AND isbless=1}
,
undef
,
$self
->
{
id
});
if
(
!
$res
)
{
# Now check if user is a member of a group that can bless a group
$res
=
$dbh
->
selectrow_arrayref
(
q{SELECT 1
FROM user_group_map, group_group_map
WHERE user_group_map.user_id=?
AND user_group_map.group_id=member_id
AND group_group_map.grant_type=}
.
GROUP_BLESS
,
undef
,
$self
->
{
id
});
if
(
!
scalar
(
@_
))
{
# If we're called without an argument, just return
# whether or not we can bless at all.
return
scalar
(
keys
%
{
$self
->
bless_groups
})
?
1
:
0
;
}
$self
->
{
can_bless
}
=
$res
?
1
:
0
;
return
$self
->
{
can_bless
}
;
# Otherwise, we're checking a specific group
my
$group_name
=
shift
;
return
exists
(
$self
->
bless_groups
->
{
$group_name
})
;
}
sub
flatten_group_membership
{
...
...
@@ -1136,6 +1151,13 @@ intended for cases where we are not looking at the currently logged in user,
and only need to make a quick check for the group, where calling C<groups>
and getting all of the groups would be overkill.
=item C<bless_groups>
Returns a hashref of group names for groups that the user can bless. The keys
are the names of the groups, whilst the values are the respective group ids.
(This is so that a set of all groupids for groups the user can bless can be
obtained by C<values(%{$user->bless_groups})>.)
=item C<can_see_bug(bug_id)>
Determines if the user can see the specified bug.
...
...
@@ -1198,7 +1220,12 @@ all MySQL supported, this will go away.
=item C<can_bless>
Returns C<1> if the user can bless at least one group. Otherwise returns C<0>.
When called with no arguments:
Returns C<1> if the user can bless at least one group, returns C<0> otherwise.
When called with one argument:
Returns C<1> if the user can bless the group with that name, returns
C<0> otherwise.
=item C<set_flags>
=item C<get_flag>
...
...
editusers.cgi
View file @
dedbe7d0
...
...
@@ -153,7 +153,7 @@ sub EmitFormElements ($$$$)
print
"<TD COLSPAN=2 ALIGN=LEFT><B>User is a member of these groups</B></TD>\n"
;
while
(
MoreSQLData
())
{
my
(
$groupid
,
$name
,
$description
,
$checked
,
$isderived
,
$isregexp
)
=
FetchSQLData
();
next
unless
(
$editall
||
UserCanBlessGroup
(
$name
));
next
unless
(
$editall
||
Bugzilla
->
user
->
can_bless
(
$name
));
PushGlobalSQLState
();
SendSQL
(
"SELECT user_id "
.
"FROM user_group_map "
.
...
...
@@ -726,7 +726,7 @@ if ($action eq 'update') {
my
$chggrp
=
0
;
SendSQL
(
"SELECT id, name FROM groups"
);
while
(
my
(
$groupid
,
$name
)
=
FetchSQLData
())
{
next
unless
(
$editall
||
UserCanBlessGroup
(
$name
));
next
unless
(
$editall
||
Bugzilla
->
user
->
can_bless
(
$name
));
if
(
$::FORM
{
"oldgroup_$groupid"
}
!=
(
$::FORM
{
"group_$groupid"
}
?
1
:
0
))
{
# group membership changed
PushGlobalSQLState
();
...
...
globals.pl
View file @
dedbe7d0
...
...
@@ -1033,36 +1033,6 @@ sub UserInGroup {
return
defined
Bugzilla
->
user
->
groups
->
{
$_
[
0
]};
}
sub
UserCanBlessGroup
{
my
(
$groupname
)
=
(
@_
);
PushGlobalSQLState
();
# check if user explicitly can bless group
SendSQL
(
"SELECT groups.id FROM groups, user_group_map
WHERE groups.id = user_group_map.group_id
AND user_group_map.user_id = $::userid
AND isbless = 1
AND groups.name = "
.
SqlQuote
(
$groupname
));
my
$result
=
FetchOneColumn
();
PopGlobalSQLState
();
if
(
$result
)
{
return
1
;
}
PushGlobalSQLState
();
# check if user is a member of a group that can bless this group
# this group does not count
SendSQL
(
"SELECT groups.id FROM groups, user_group_map,
group_group_map
WHERE groups.id = grantor_id
AND user_group_map.user_id = $::userid
AND user_group_map.isbless = 0
AND group_group_map.grant_type = "
.
GROUP_BLESS
.
"
AND user_group_map.group_id = member_id
AND groups.name = "
.
SqlQuote
(
$groupname
));
$result
=
FetchOneColumn
();
PopGlobalSQLState
();
return
$result
;
}
sub
BugInGroupId
{
my
(
$bugid
,
$groupid
)
=
(
@_
);
PushGlobalSQLState
();
...
...
userprefs.cgi
View file @
dedbe7d0
...
...
@@ -282,7 +282,7 @@ sub DoPermissions {
"ORDER BY name"
);
while
(
MoreSQLData
())
{
my
(
$nam
,
$desc
)
=
FetchSQLData
();
if
(
UserCanBlessGroup
(
$nam
))
{
if
(
Bugzilla
->
user
->
can_bless
(
$nam
))
{
push
(
@set_bits
,
{
"desc"
=>
$desc
,
"name"
=>
$nam
});
}
}
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment