TT#119550 Allow subscribers to manage their registrations

* give access to subscribers roles to see,
	    create and update own registrations
	  * subscriberadmins can manage all registrations
	    of subscribers under same customer

Change-Id: I643121da901b0ed99fc718106a1632da4e1e1936
mr9.5.1
Flaviu Mates 4 years ago
parent 7177959a79
commit f4cb6933b4

@ -82,7 +82,7 @@ sub relation{
}
__PACKAGE__->set_config({
allowed_roles => [qw/admin reseller ccareadmin ccare/],
allowed_roles => [qw/admin reseller ccareadmin ccare subscriber subscriberadmin/],
});
sub GET :Allow {

@ -30,7 +30,7 @@ sub relation{
}
__PACKAGE__->set_config({
allowed_roles => [qw/admin reseller ccareadmin ccare/],
allowed_roles => [qw/admin reseller ccareadmin ccare subscriber subscriberadmin/],
});
sub GET :Allow {

@ -55,6 +55,47 @@ sub _item_rs {
if ($c->user->roles eq "admin" || $c->user->roles eq "ccareadmin") {
} elsif ($c->user->roles eq "reseller" || $c->user->roles eq "ccare") {
$filter->{reseller_id} = $c->user->reseller_id;
} elsif ($c->user->roles eq "subscriber") {
if ($c->req->param('subscriber_id')) {
my $sub = $c->model('DB')->resultset('voip_subscribers')->find($c->req->param('subscriber_id'));
if ($sub && $sub->provisioning_voip_subscriber->id == $c->user->id) {
$filter->{username} = NGCP::Panel::Utils::Subscriber::get_sub_username_and_aliases($sub->provisioning_voip_subscriber);
} else {
$filter->{username} = undef;
}
} else {
$filter->{username} = NGCP::Panel::Utils::Subscriber::get_sub_username_and_aliases($c->user);
}
if($c->config->{features}->{multidomain}) {
$filter->{domain} = $c->user->domain->domain;
} else {
$filter->{domain} = undef;
}
} elsif ($c->user->roles eq "subscriberadmin") {
if ($c->req->param('subscriber_id')) {
my $sub = $c->model('DB')->resultset('voip_subscribers')->search(
{
id => $c->req->param('subscriber_id'),
contract_id => $c->user->account_id
}
)->first;
if ($sub) {
$filter->{username} = NGCP::Panel::Utils::Subscriber::get_sub_username_and_aliases($sub->provisioning_voip_subscriber);
} else {
$filter->{username} = undef;
}
} else {
my @customer_subscribers = $c->model('DB')->resultset('voip_subscribers')->search({contract_id => $c->user->account_id})->all();
foreach my $sub (@customer_subscribers) {
my $sub_username_aliases = NGCP::Panel::Utils::Subscriber::get_sub_username_and_aliases($sub->provisioning_voip_subscriber);
push (@{ $filter->{username} }, @$sub_username_aliases);
}
}
if($c->config->{features}->{multidomain}) {
$filter->{domain} = $c->user->domain->domain;
} else {
$filter->{domain} = undef;
}
}
}
$item_rs = NGCP::Panel::Utils::Subscriber::get_subscriber_location_rs($c, $filter, $opt);
@ -76,6 +117,12 @@ sub _item_rs {
},{
join => [@joins, { 'subscriber' => { 'voip_subscriber' => { 'contract' => 'contact' }}} ],
});
} elsif($c->user->roles eq "subscriber" || $c->user->roles eq "subscriberadmin") {
$item_rs = $item_rs->search({
'subscriber.uuid' => $c->user->uuid
},{
join => [@joins,'subscriber'],
});
}
}
return $item_rs;
@ -150,7 +197,12 @@ sub item_by_id {
my ($self, $c, $id) = @_;
my $item_rs = $self->item_rs($c,{ id => $id, });
return $item_rs->find($id);
my $item = $item_rs->find($id);
if ($c->user->roles eq "subscriber" || $c->user->roles eq "subscriberadmin") {
my $sub = $self->subscriber_from_item($c, $item);
return unless($sub->provisioning_voip_subscriber->id == $c->user->id);
}
return $item;
}
sub subscriber_from_item {
@ -197,6 +249,10 @@ sub subscriber_from_id {
},{
join => { contract => 'contact' },
});
} elsif($c->user->roles eq "subscriber" || $c->user->roles eq "subscriberadmin") {
$sub_rs = $sub_rs->search({
'me.uuid' => $c->user->uuid,
});
}
my $sub = $sub_rs->first;
unless($sub && $sub->provisioning_voip_subscriber) {

@ -2531,6 +2531,22 @@ sub check_pbx_extension_range {
return 1
}
sub get_sub_username_and_aliases {
my ($prov_subscriber) = @_;
my @usernames;
push @usernames, $prov_subscriber->username;
my $devid_aliases = $prov_subscriber->voip_dbaliases->search(
{
is_devid => 1,
subscriber_id => $prov_subscriber->id,
}
);
foreach my $devid ($devid_aliases->all) {
push @usernames, $devid->username;
}
return \@usernames;
}
1;
=head1 NAME

Loading…
Cancel
Save