MT#56234 susbcriber preferences related changes

* fix customer_view role name typo so that it's correctly limited
  to for 'subscriberadmin' role
* revert behaviour of get_usr_preference_rs() to return undef if
  no preference is found (no access)
* get_usr_preference_rs() now also fetches all internal preferences
  for internal work for 'subscriber' and 'subscriberadmin' roles but
  they remain invisible for them and not accesible for direct changes
  (only when requested by internal logic)
* new get_usr_preference_rs() 'as_admin' parameter that enables
  for internal requests to return the preference value for
  'subscriberadmin' and 'subscriber' roles, currently used to
  show 'lock' status and 'display_name', which are otherwise
  inaccessible as those preferences do not have expose_to_customer,
  expose_to_subscriber flags
* fix api_prference_defs() correct filtering of preferences for
  'subscriber' and 'subscriberadmin' roles

Change-Id: I1a0e51ace1c649f9061deaccb7d6e9f8459f0ed8
mr11.2
Kirill Solomko 3 years ago
parent 81d50cdce1
commit 6d487452bb

@ -2652,7 +2652,7 @@ sub load_preference_list :Private {
NGCP::Panel::Utils::Preferences::load_preference_list( c => $c,
pref_values => \%pref_values,
usr_pref => 1,
customer_view => ($c->user->roles eq 'subscriberdmin' ? 1 : 0),
customer_view => ($c->user->roles eq 'subscriberadmin' ? 1 : 0),
subscriber_view => ($c->user->roles eq 'subscriber' ? 1 : 0),
);
}
@ -2705,6 +2705,7 @@ sub master :Chained('base') :PathPart('details') :CaptureArgs(0) {
c => $c,
attribute => 'lock',
prov_subscriber => $c->stash->{subscriber}->provisioning_voip_subscriber,
as_admin => 1,
);
}
@ -2717,6 +2718,7 @@ sub details :Chained('master') :PathPart('') :Args(0) :Does(ACL) :ACLDetachTo('/
c => $c,
attribute => 'lock',
prov_subscriber => $c->stash->{subscriber}->provisioning_voip_subscriber,
as_admin => 1,
);
my $locklevel = $c->stash->{prov_lock}->first ? $c->stash->{prov_lock}->first->value : 0;
$c->stash->{prov_lock_string} = NGCP::Panel::Utils::Subscriber::get_lock_string($locklevel);
@ -2879,7 +2881,10 @@ sub edit_master :Chained('master') :PathPart('edit') :Args(0) :Does(ACL) :ACLDet
}
my $display_pref = NGCP::Panel::Utils::Preferences::get_usr_preference_rs(
c => $c, attribute => 'display_name', prov_subscriber => $prov_subscriber);
c => $c, attribute => 'display_name',
prov_subscriber => $prov_subscriber,
as_admin => 1,
);
if($display_pref->first) {
$params->{display_name} = $display_pref->first->value;
}

@ -143,7 +143,7 @@ sub resource_from_item {
})->all;
$pref = NGCP::Panel::Utils::Preferences::get_usr_preference_rs(
c => $c, attribute => 'display_name',
c => $c, attribute => 'display_name', as_admin => 1,
prov_subscriber => $item->provisioning_voip_subscriber);
if($pref->first && $pref->first->value) {
$resource{display_name} = $pref->first->value;

@ -2418,7 +2418,6 @@ sub get_chained_preference_rs {
$preference_type,
$preference_elem,
$attr,
{ exists $params->{subscriberadmin} ? (subscriberadmin => $params->{subscriberadmin} ) : () },
);
if ($attribute_value_rs->first) {
return $attribute_value_rs;
@ -2435,21 +2434,19 @@ sub get_usr_preference_rs {
my $attribute = $params{attribute};
my $prov_subscriber = $params{prov_subscriber};
my $schema = $params{schema} // $c->model('DB');
my $as_admin = $params{as_admin} // 0;
my $pref_rs = $schema->resultset('voip_preferences')->search_rs({
attribute => $attribute,
usr_pref => 1,
$c->user->roles eq 'subscriberadmin'
? (expose_to_customer => 1) : (),
$c->user->roles eq 'subscriber'
? (expose_to_subscriber => 1) : (),
});
unless ($pref_rs && $pref_rs->first) {
# an ResultSet object is expected as the return value
return $pref_rs;
}
attribute => $attribute,
usr_pref => 1,
!$as_admin && $c->user->roles eq 'subscriberadmin'
? (-or => [ expose_to_customer => 1, internal => { '!=' => 0 } ]) : (),
!$as_admin && $c->user->roles eq 'subscriber'
? (-or => [ expose_to_subscriber => 1, internal => { '!=' => 0 } ]) : (),
})->first;
return unless $pref_rs;
my $attribute_id = $pref_rs->first->id;
my $attribute_id = $pref_rs->id;
# filter by allowed attrs from profile
if (($c->user->roles eq 'subscriberadmin' || $c->user->roles eq 'subscriber') &&
@ -2457,11 +2454,11 @@ sub get_usr_preference_rs {
my $found_attr = $prov_subscriber->voip_subscriber_profile
->profile_attributes->search_rs({
attribute_id => $attribute_id,
});
return $found_attr unless $found_attr->first;
})->first;
return unless $found_attr;
}
$pref_rs = $pref_rs->first->voip_usr_preferences;
$pref_rs = $pref_rs->voip_usr_preferences;
if ($prov_subscriber) {
$pref_rs = $pref_rs->search({
subscriber_id => $prov_subscriber->id,
@ -2727,6 +2724,10 @@ sub api_preferences_defs {
my $preferences = $c->model('DB')->resultset('voip_preferences')->search({
internal => { '!=' => 1 }, # also fetch -1 for ncos, rwr
$preferences_group => 1,
$c->user->roles eq 'subscriberadmin'
? (expose_to_customer => 1) : (),
$c->user->roles eq 'subscriber'
? (expose_to_subscriber => 1) : (),
});
my $resource = {};

Loading…
Cancel
Save