mirror of
https://salsa.debian.org/freeipa-team/freeipa.git
synced 2025-02-25 18:55:28 -06:00
webui: change permissions UI to v2
reflect ipalib permission changes in Web UI. - http://www.freeipa.org/page/V4/Permissions_V2 - http://www.freeipa.org/page/V4/Anonymous_and_All_permissions - http://www.freeipa.org/page/V4/Managed_Read_permissions - http://www.freeipa.org/page/V4/Multivalued_target_filters_in_permissions https://fedorahosted.org/freeipa/ticket/4079 Reviewed-By: Adam Misnyovszki <amisnyov@redhat.com> Reviewed-By: Petr Viktorin <pviktori@redhat.com>
This commit is contained in:
@@ -137,7 +137,8 @@
|
|||||||
"classes": [
|
"classes": [
|
||||||
"*facet_policy",
|
"*facet_policy",
|
||||||
"IPA.hide_empty_row_policy",
|
"IPA.hide_empty_row_policy",
|
||||||
"IPA.permission_target_policy"
|
"aci.permission_target_policy",
|
||||||
|
"aci.permission_managed_policy"
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -977,6 +977,13 @@ table.scrollable tbody {
|
|||||||
display: inline;
|
display: inline;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.option_widget.columns > li {
|
||||||
|
float: left;
|
||||||
|
width: 33%;
|
||||||
|
min-width: 90px;
|
||||||
|
max-width: 150px;
|
||||||
|
}
|
||||||
|
|
||||||
.combobox-widget-input {
|
.combobox-widget-input {
|
||||||
display: inline-block;
|
display: inline-block;
|
||||||
position: relative;
|
position: relative;
|
||||||
|
|||||||
@@ -206,8 +206,12 @@ define([
|
|||||||
details.append('<p> Web UI got in unrecoverable state during "'+error.phase+'" phase.</p>');
|
details.append('<p> Web UI got in unrecoverable state during "'+error.phase+'" phase.</p>');
|
||||||
|
|
||||||
if (error.results) {
|
if (error.results) {
|
||||||
|
var msg = {
|
||||||
|
message: error.results.message,
|
||||||
|
stack: error.results.stack
|
||||||
|
};
|
||||||
details.append('<strong>Technical details:</strong>');
|
details.append('<strong>Technical details:</strong>');
|
||||||
details.append('<p>'+JSON.stringify(error.results)+'</p>');
|
details.append('<p>'+JSON.stringify(msg)+'</p>');
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
|||||||
@@ -36,13 +36,19 @@ define([
|
|||||||
* Widgets, entities and fields related to Access Control that means
|
* Widgets, entities and fields related to Access Control that means
|
||||||
* Permissions, Privilege, Role, Delegation and Self-service.
|
* Permissions, Privilege, Role, Delegation and Self-service.
|
||||||
*
|
*
|
||||||
* When loaded, this module is also accessible as `IPA.aci`.
|
|
||||||
*
|
|
||||||
* @class aci
|
* @class aci
|
||||||
* @alternateClassName IPA.aci
|
|
||||||
* @singleton
|
* @singleton
|
||||||
*/
|
*/
|
||||||
var exp = IPA.aci = {};
|
var aci = {};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* List of fields which are disabled for managed permissions
|
||||||
|
* @property {Array}
|
||||||
|
*/
|
||||||
|
aci.managed_fields = [
|
||||||
|
'ipapermright', 'extratargetfilter', 'memberof', 'ipapermlocation',
|
||||||
|
'ipapermtarget', 'type'
|
||||||
|
];
|
||||||
|
|
||||||
var make_permission_spec = function() {
|
var make_permission_spec = function() {
|
||||||
|
|
||||||
@@ -55,63 +61,91 @@ return {
|
|||||||
columns: [ 'cn' ]
|
columns: [ 'cn' ]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
$factory: IPA.aci.permission_details_facet,
|
$factory: aci.permission_details_facet,
|
||||||
$type: 'details',
|
$type: 'details',
|
||||||
fields: [
|
fields: [
|
||||||
{
|
{
|
||||||
name:'cn',
|
name:'cn',
|
||||||
widget: 'identity.cn'
|
widget: 'identity.cn'
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
$type: 'radio',
|
||||||
|
name:'ipapermbindruletype',
|
||||||
|
widget: 'identity.ipapermbindruletype',
|
||||||
|
flags: ['w_if_no_aci']
|
||||||
|
},
|
||||||
{
|
{
|
||||||
$type: 'rights',
|
$type: 'rights',
|
||||||
name: 'permissions',
|
name: 'ipapermright',
|
||||||
widget: 'rights.permissions'
|
widget: 'identity.ipapermright',
|
||||||
|
required: true,
|
||||||
|
flags: ['w_if_no_aci']
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
$type: 'select',
|
$type: 'multivalued',
|
||||||
name: 'target',
|
name: 'extratargetfilter',
|
||||||
widget: 'target.target',
|
widget: 'target.extratargetfilter',
|
||||||
enabled: false
|
acl_param: 'ipapermtargetfilter',
|
||||||
|
enabled: false,
|
||||||
|
flags: ['w_if_no_aci']
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'filter',
|
$type: 'multivalued',
|
||||||
widget: 'target.filter',
|
|
||||||
enabled: false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
$type: 'entity_select',
|
|
||||||
name: 'memberof',
|
name: 'memberof',
|
||||||
widget: 'target.memberof',
|
widget: 'target.memberof',
|
||||||
enabled: false
|
enabled: false,
|
||||||
|
flags: ['w_if_no_aci']
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'subtree',
|
name: 'ipapermlocation',
|
||||||
widget: 'target.subtree',
|
widget: 'target.ipapermlocation',
|
||||||
enabled: false
|
enabled: false,
|
||||||
|
flags: ['w_if_no_aci']
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
$type: 'entity_select',
|
name: 'ipapermtarget',
|
||||||
name: 'targetgroup',
|
widget: 'target.ipapermtarget',
|
||||||
widget: 'target.targetgroup',
|
enabled: false,
|
||||||
enabled: false
|
flags: ['w_if_no_aci']
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
$type: 'select',
|
$type: 'select',
|
||||||
name: 'type',
|
name: 'type',
|
||||||
widget: 'target.type',
|
widget: 'target.type',
|
||||||
enabled: false
|
enabled: false,
|
||||||
|
flags: ['w_if_no_aci']
|
||||||
|
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'attrs',
|
name: 'attrs',
|
||||||
widget: 'target.attrs',
|
widget: 'target.attrs',
|
||||||
enabled: false
|
enabled: false,
|
||||||
|
flags: ['w_if_no_aci']
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'attrs_multi',
|
name: 'attrs_multi',
|
||||||
param: 'attrs',
|
param: 'attrs',
|
||||||
$type: 'multivalued',
|
$type: 'multivalued',
|
||||||
widget: 'target.attrs_multi',
|
widget: 'target.attrs_multi',
|
||||||
enabled: false
|
enabled: false,
|
||||||
|
flags: ['w_if_no_aci']
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'ipapermdefaultattr',
|
||||||
|
$type: 'multivalued',
|
||||||
|
widget: 'managed.ipapermdefaultattr'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'ipapermincludedattr',
|
||||||
|
$type: 'multivalued',
|
||||||
|
widget: 'managed.ipapermincludedattr',
|
||||||
|
read_only: true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'ipapermexcludedattr',
|
||||||
|
$type: 'multivalued',
|
||||||
|
widget: 'managed.ipapermexcludedattr',
|
||||||
|
read_only: true
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
widgets: [
|
widgets: [
|
||||||
@@ -120,17 +154,16 @@ return {
|
|||||||
name: 'identity',
|
name: 'identity',
|
||||||
label: '@i18n:objects.permission.identity',
|
label: '@i18n:objects.permission.identity',
|
||||||
widgets: [
|
widgets: [
|
||||||
'cn'
|
'cn',
|
||||||
]
|
{
|
||||||
},
|
$type: 'radio',
|
||||||
{
|
name: 'ipapermbindruletype',
|
||||||
$type: 'details_section',
|
options: ['permission', 'all', 'anonymous']
|
||||||
name: 'rights',
|
},
|
||||||
label: '@i18n:objects.permission.rights',
|
|
||||||
widgets: [
|
|
||||||
{
|
{
|
||||||
$type: 'rights',
|
$type: 'rights',
|
||||||
name: 'permissions'
|
name: 'ipapermright',
|
||||||
|
layout: 'columns'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
@@ -138,13 +171,32 @@ return {
|
|||||||
$type: 'permission_target',
|
$type: 'permission_target',
|
||||||
container_factory: IPA.details_section,
|
container_factory: IPA.details_section,
|
||||||
label: '@i18n:objects.permission.target',
|
label: '@i18n:objects.permission.target',
|
||||||
name: 'target',
|
name: 'target'
|
||||||
show_target: false
|
},
|
||||||
|
{
|
||||||
|
$type: 'details_section',
|
||||||
|
name: 'managed',
|
||||||
|
label: '@i18n:objects.permission.managed',
|
||||||
|
widgets: [
|
||||||
|
{
|
||||||
|
$type: 'multivalued',
|
||||||
|
name: 'ipapermdefaultattr'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
$type: 'multivalued',
|
||||||
|
name: 'ipapermincludedattr'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
$type: 'multivalued',
|
||||||
|
name: 'ipapermexcludedattr'
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
policies: [
|
policies: [
|
||||||
|
aci.permission_managed_policy,
|
||||||
{
|
{
|
||||||
$factory: IPA.permission_target_policy,
|
$factory: aci.permission_target_policy,
|
||||||
widget_name: 'target'
|
widget_name: 'target'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -162,37 +214,38 @@ return {
|
|||||||
name:'cn',
|
name:'cn',
|
||||||
widget: 'general.cn'
|
widget: 'general.cn'
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
$type: 'radio',
|
||||||
|
name:'ipapermbindruletype',
|
||||||
|
widget: 'general.ipapermbindruletype'
|
||||||
|
},
|
||||||
{
|
{
|
||||||
$type: 'rights',
|
$type: 'rights',
|
||||||
name: 'permissions',
|
name: 'ipapermright',
|
||||||
widget: 'general.permissions'
|
widget: 'general.ipapermright',
|
||||||
|
required: true
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
$type: 'select',
|
$type: 'multivalued',
|
||||||
name: 'target',
|
name: 'extratargetfilter',
|
||||||
widget: 'target.target',
|
widget: 'target.extratargetfilter',
|
||||||
|
acl_param: 'ipapermtargetfilter',
|
||||||
enabled: false
|
enabled: false
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'filter',
|
$type: 'multivalued',
|
||||||
widget: 'target.filter',
|
|
||||||
enabled: false
|
|
||||||
},
|
|
||||||
{
|
|
||||||
$type: 'entity_select',
|
|
||||||
name: 'memberof',
|
name: 'memberof',
|
||||||
widget: 'target.memberof',
|
widget: 'target.memberof',
|
||||||
enabled: false
|
enabled: false
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'subtree',
|
name: 'ipapermlocation',
|
||||||
widget: 'target.subtree',
|
widget: 'target.ipapermlocation',
|
||||||
enabled: false
|
enabled: false
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
$type: 'entity_select',
|
name: 'ipapermtarget',
|
||||||
name: 'targetgroup',
|
widget: 'target.ipapermtarget',
|
||||||
widget: 'target.targetgroup',
|
|
||||||
enabled: false
|
enabled: false
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -220,21 +273,27 @@ return {
|
|||||||
name: 'general',
|
name: 'general',
|
||||||
widgets: [
|
widgets: [
|
||||||
'cn',
|
'cn',
|
||||||
|
{
|
||||||
|
$type: 'radio',
|
||||||
|
name: 'ipapermbindruletype',
|
||||||
|
options: ['permission', 'all', 'anonymous'],
|
||||||
|
default_value: 'permission'
|
||||||
|
},
|
||||||
{
|
{
|
||||||
$type: 'rights',
|
$type: 'rights',
|
||||||
name: 'permissions'
|
name: 'ipapermright',
|
||||||
|
layout: 'columns'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
$type: 'permission_target',
|
$type: 'permission_target',
|
||||||
name:'target',
|
name:'target'
|
||||||
show_target: true
|
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
policies: [
|
policies: [
|
||||||
{
|
{
|
||||||
$factory: IPA.permission_target_policy,
|
$factory: aci.permission_target_policy,
|
||||||
widget_name: 'target'
|
widget_name: 'target'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -245,7 +304,7 @@ return {
|
|||||||
* @class aci.permission_details_facet
|
* @class aci.permission_details_facet
|
||||||
* @extends details.details_facet
|
* @extends details.details_facet
|
||||||
*/
|
*/
|
||||||
IPA.aci.permission_details_facet = function(spec) {
|
aci.permission_details_facet = function(spec) {
|
||||||
|
|
||||||
var that = IPA.details_facet(spec);
|
var that = IPA.details_facet(spec);
|
||||||
|
|
||||||
@@ -297,7 +356,8 @@ return {
|
|||||||
name: 'memberof_permission',
|
name: 'memberof_permission',
|
||||||
facet_group: 'permission',
|
facet_group: 'permission',
|
||||||
add_method: 'add_permission',
|
add_method: 'add_permission',
|
||||||
remove_method: 'remove_permission'
|
remove_method: 'remove_permission',
|
||||||
|
search_options: { 'ipapermbindruletype': 'permission' }
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
standard_association_facets: true,
|
standard_association_facets: true,
|
||||||
@@ -478,10 +538,10 @@ return {
|
|||||||
};};
|
};};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @class IPA.attributes_widget
|
* @class aci.attributes_widget
|
||||||
* @extends IPA.checkboxes_widget
|
* @extends IPA.checkboxes_widget
|
||||||
*/
|
*/
|
||||||
IPA.attributes_widget = function(spec) {
|
aci.attributes_widget = function(spec) {
|
||||||
|
|
||||||
spec = spec || {};
|
spec = spec || {};
|
||||||
|
|
||||||
@@ -540,13 +600,14 @@ IPA.attributes_widget = function(spec) {
|
|||||||
var tbody = $('tbody', that.table);
|
var tbody = $('tbody', that.table);
|
||||||
|
|
||||||
for (var i=0; i<options.length ; i++){
|
for (var i=0; i<options.length ; i++){
|
||||||
var value = options[i].toLowerCase();
|
var option = options[i];
|
||||||
|
var value = option.value.toLowerCase();
|
||||||
var tr = $('<tr/>').appendTo(tbody);
|
var tr = $('<tr/>').appendTo(tbody);
|
||||||
|
|
||||||
var td = $('<td/>').appendTo(tr);
|
var td = $('<td/>').appendTo(tr);
|
||||||
var name = that.get_input_name();
|
var name = that.get_input_name();
|
||||||
var id = that._option_next_id + name;
|
var id = that._option_next_id + name;
|
||||||
IPA.standalone_option({
|
var opt = IPA.standalone_option({
|
||||||
id: id,
|
id: id,
|
||||||
type: 'checkbox',
|
type: 'checkbox',
|
||||||
name: name,
|
name: name,
|
||||||
@@ -561,6 +622,7 @@ IPA.attributes_widget = function(spec) {
|
|||||||
text: value,
|
text: value,
|
||||||
'for': id
|
'for': id
|
||||||
}));
|
}));
|
||||||
|
option.input_node = opt[0];
|
||||||
that.new_option_id();
|
that.new_option_id();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
@@ -582,6 +644,7 @@ IPA.attributes_widget = function(spec) {
|
|||||||
|
|
||||||
that.populate(that.object_type);
|
that.populate(that.object_type);
|
||||||
that.append();
|
that.append();
|
||||||
|
that.create_options(that.options);
|
||||||
that.owb_update(values);
|
that.owb_update(values);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -597,7 +660,6 @@ IPA.attributes_widget = function(spec) {
|
|||||||
var aciattrs = metadata.aciattrs;
|
var aciattrs = metadata.aciattrs;
|
||||||
|
|
||||||
that.options = that.prepare_options(aciattrs);
|
that.options = that.prepare_options(aciattrs);
|
||||||
that.create_options(aciattrs);
|
|
||||||
};
|
};
|
||||||
|
|
||||||
that.append = function() {
|
that.append = function() {
|
||||||
@@ -614,7 +676,6 @@ IPA.attributes_widget = function(spec) {
|
|||||||
|
|
||||||
if (unmatched.length > 0 && !that.skip_unmatched) {
|
if (unmatched.length > 0 && !that.skip_unmatched) {
|
||||||
that.options.push.apply(that.options, that.prepare_options(unmatched));
|
that.options.push.apply(that.options, that.prepare_options(unmatched));
|
||||||
that.create_options(unmatched);
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -634,14 +695,14 @@ IPA.attributes_widget = function(spec) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @class IPA.rights_widget
|
* @class aci.rights_widget
|
||||||
* @extends IPA.checkboxes_widget
|
* @extends IPA.checkboxes_widget
|
||||||
*/
|
*/
|
||||||
IPA.rights_widget = function(spec) {
|
aci.rights_widget = function(spec) {
|
||||||
|
|
||||||
var that = IPA.checkboxes_widget(spec);
|
var that = IPA.checkboxes_widget(spec);
|
||||||
|
|
||||||
that.rights = ['write', 'add', 'delete'];
|
that.rights = ['read', 'search', 'compare', 'write', 'add', 'delete', 'all'];
|
||||||
for (var i=0; i<that.rights.length; i++) {
|
for (var i=0; i<that.rights.length; i++) {
|
||||||
var right = that.rights[i];
|
var right = that.rights[i];
|
||||||
that.add_option({label: right, value: right});
|
that.add_option({label: right, value: right});
|
||||||
@@ -650,11 +711,18 @@ IPA.rights_widget = function(spec) {
|
|||||||
return that;
|
return that;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @class IPA.permission_target_widget
|
* Default target to display in `permission_target_widget`
|
||||||
|
* @property {string}
|
||||||
|
*/
|
||||||
|
aci.default_target = 'general';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @class aci.permission_target_widget
|
||||||
* @extends IPA.details_section
|
* @extends IPA.details_section
|
||||||
*/
|
*/
|
||||||
IPA.permission_target_widget = function(spec) {
|
aci.permission_target_widget = function(spec) {
|
||||||
|
|
||||||
spec = spec || {};
|
spec = spec || {};
|
||||||
|
|
||||||
@@ -664,95 +732,72 @@ IPA.permission_target_widget = function(spec) {
|
|||||||
|
|
||||||
that.group_entity = IPA.get_entity(spec.group_entity || 'group');
|
that.group_entity = IPA.get_entity(spec.group_entity || 'group');
|
||||||
|
|
||||||
that.targets = [ 'filter', 'subtree', 'targetgroup', 'type' ];
|
that.target = aci.default_target;
|
||||||
that.target = that.targets[0];
|
|
||||||
that.show_target = spec.show_target;
|
|
||||||
|
|
||||||
var init = function() {
|
var init = function() {
|
||||||
|
|
||||||
that.target_select = IPA.select_widget({
|
var objects = metadata_provider.get('@m:objects');
|
||||||
entity: that.entity,
|
var types = IPA.create_options(['']);
|
||||||
name: 'target',
|
for (var o in objects) {
|
||||||
label: '@i18n:objects.permission.target',
|
if (objects.hasOwnProperty(o)) {
|
||||||
hidden: !that.show_target
|
var obj = objects[o];
|
||||||
});
|
if (obj.can_have_permissions) {
|
||||||
|
types.push({
|
||||||
for (var i=0; i<that.targets.length; i++) {
|
label: obj.label_singular,
|
||||||
var target = that.targets[i];
|
value: o
|
||||||
var target_param = IPA.get_entity_param('permission', target);
|
});
|
||||||
|
}
|
||||||
that.target_select.options.push({
|
}
|
||||||
label: target_param.label,
|
|
||||||
value: target
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
that.widgets.add_widget(that.target_select);
|
|
||||||
|
|
||||||
|
|
||||||
that.memberof_select = IPA.entity_select_widget({
|
|
||||||
entity: that.entity,
|
|
||||||
name: 'memberof',
|
|
||||||
other_entity: that.group_entity,
|
|
||||||
other_field: 'cn',
|
|
||||||
hidden: true
|
|
||||||
});
|
|
||||||
|
|
||||||
that.widgets.add_widget(that.memberof_select);
|
|
||||||
|
|
||||||
that.filter_text = IPA.text_widget({
|
|
||||||
entity: that.entity,
|
|
||||||
name: 'filter',
|
|
||||||
hidden: true
|
|
||||||
});
|
|
||||||
|
|
||||||
that.widgets.add_widget(that.filter_text);
|
|
||||||
|
|
||||||
that.subtree_textarea = IPA.textarea_widget({
|
|
||||||
entity: that.entity,
|
|
||||||
name: 'subtree',
|
|
||||||
hidden: true
|
|
||||||
});
|
|
||||||
|
|
||||||
that.widgets.add_widget(that.subtree_textarea);
|
|
||||||
|
|
||||||
that.group_select = IPA.entity_select_widget({
|
|
||||||
entity: that.entity,
|
|
||||||
name: 'targetgroup',
|
|
||||||
other_entity: that.group_entity,
|
|
||||||
other_field: 'cn',
|
|
||||||
hidden: true
|
|
||||||
});
|
|
||||||
|
|
||||||
that.widgets.add_widget(that.group_select);
|
|
||||||
|
|
||||||
that.type_select = IPA.select_widget({
|
that.type_select = IPA.select_widget({
|
||||||
entity: that.entity,
|
entity: that.entity,
|
||||||
name: 'type',
|
name: 'type',
|
||||||
hidden: true
|
hidden: true,
|
||||||
|
options: types
|
||||||
});
|
});
|
||||||
|
|
||||||
var type_param = IPA.get_entity_param('permission', 'type');
|
|
||||||
|
|
||||||
for (var j=0; j<type_param.values.length; j++) {
|
|
||||||
var type_name = type_param.values[j];
|
|
||||||
var type_label = metadata_provider.get('@mo:'+type_name+'.label_singular');
|
|
||||||
|
|
||||||
that.type_select.options.push({
|
|
||||||
label: type_label,
|
|
||||||
value: type_name
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
that.widgets.add_widget(that.type_select);
|
that.widgets.add_widget(that.type_select);
|
||||||
|
|
||||||
that.attribute_table = IPA.attributes_widget({
|
that.ipapermlocation_text = IPA.text_widget({
|
||||||
entity: that.entity,
|
entity: that.entity,
|
||||||
name: 'attrs',
|
name: 'ipapermlocation',
|
||||||
object_type: type_param.values[0],
|
|
||||||
hidden: true
|
hidden: true
|
||||||
});
|
});
|
||||||
|
that.widgets.add_widget(that.ipapermlocation_text);
|
||||||
|
|
||||||
|
that.extratargetfilter_text = IPA.multivalued_widget({
|
||||||
|
entity: that.entity,
|
||||||
|
name: 'extratargetfilter',
|
||||||
|
hidden: true
|
||||||
|
});
|
||||||
|
that.widgets.add_widget(that.extratargetfilter_text);
|
||||||
|
|
||||||
|
that.ipapermtarget_text = IPA.text_widget({
|
||||||
|
entity: that.entity,
|
||||||
|
name: 'ipapermtarget',
|
||||||
|
hidden: true
|
||||||
|
});
|
||||||
|
that.widgets.add_widget(that.ipapermtarget_text);
|
||||||
|
|
||||||
|
that.memberof_select = IPA.multivalued_widget({
|
||||||
|
name: 'memberof',
|
||||||
|
entity: that.entity,
|
||||||
|
hidden: true,
|
||||||
|
child_spec: {
|
||||||
|
$type: 'entity_select',
|
||||||
|
other_entity: that.group_entity,
|
||||||
|
other_field: 'cn'
|
||||||
|
}
|
||||||
|
});
|
||||||
|
that.widgets.add_widget(that.memberof_select);
|
||||||
|
|
||||||
|
|
||||||
|
that.attribute_table = aci.attributes_widget({
|
||||||
|
entity: that.entity,
|
||||||
|
name: 'attrs',
|
||||||
|
object_type: types[0].name,
|
||||||
|
hidden: true
|
||||||
|
});
|
||||||
that.widgets.add_widget(that.attribute_table);
|
that.widgets.add_widget(that.attribute_table);
|
||||||
|
|
||||||
that.attribute_multivalued = IPA.multivalued_widget({
|
that.attribute_multivalued = IPA.multivalued_widget({
|
||||||
@@ -760,7 +805,6 @@ IPA.permission_target_widget = function(spec) {
|
|||||||
name: 'attrs_multi',
|
name: 'attrs_multi',
|
||||||
hidden: true
|
hidden: true
|
||||||
});
|
});
|
||||||
|
|
||||||
that.widgets.add_widget(that.attribute_multivalued);
|
that.widgets.add_widget(that.attribute_multivalued);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -771,38 +815,65 @@ IPA.permission_target_widget = function(spec) {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Permission target policy
|
* Permission target policy
|
||||||
* @class IPA.permission_target_policy
|
* @class aci.permission_target_policy
|
||||||
* @extends IPA.facet_policy
|
* @extends IPA.facet_policy
|
||||||
*/
|
*/
|
||||||
IPA.permission_target_policy = function (spec) {
|
aci.permission_target_policy = function (spec) {
|
||||||
|
|
||||||
var that = IPA.facet_policy();
|
var that = IPA.facet_policy();
|
||||||
that.widget_name = spec.widget_name;
|
that.widget_name = spec.widget_name;
|
||||||
|
that.managed = false;
|
||||||
|
|
||||||
that.init = function() {
|
that.init = function() {
|
||||||
|
|
||||||
that.permission_target = that.container.widgets.get_widget(that.widget_name);
|
that.permission_target = that.container.widgets.get_widget(that.widget_name);
|
||||||
var widgets = that.permission_target.widgets;
|
var type_select = that.permission_target.widgets.get_widget('type');
|
||||||
|
|
||||||
var target_select = widgets.get_widget('target');
|
|
||||||
target_select.value_changed.attach(function() {
|
|
||||||
var target = target_select.save()[0];
|
|
||||||
that.select_target(target);
|
|
||||||
});
|
|
||||||
|
|
||||||
var type_select = widgets.get_widget('type');
|
|
||||||
|
|
||||||
type_select.value_changed.attach(function() {
|
type_select.value_changed.attach(function() {
|
||||||
var type = type_select.save()[0];
|
that.apply_type();
|
||||||
that.set_attrs_type(type, true);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
type_select.undo_clicked.attach(function() {
|
type_select.undo_clicked.attach(function() {
|
||||||
var type = type_select.save()[0];
|
that.apply_type();
|
||||||
that.set_attrs_type(type, true);
|
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
that.apply_type = function () {
|
||||||
|
|
||||||
|
var widgets = that.permission_target.widgets;
|
||||||
|
var type_select = widgets.get_widget('type');
|
||||||
|
var type = type_select.save()[0];
|
||||||
|
var new_target = type === '' ? 'general' : 'type';
|
||||||
|
if (that.permission_target.target !== new_target) {
|
||||||
|
|
||||||
|
var attr_table = widgets.get_widget('attrs');
|
||||||
|
var attr_multi = widgets.get_widget('attrs_multi');
|
||||||
|
var loc_w = widgets.get_widget('ipapermlocation');
|
||||||
|
var loc_f = that.container.fields.get_field('ipapermlocation');
|
||||||
|
var attrs;
|
||||||
|
that.select_target(new_target);
|
||||||
|
|
||||||
|
if (new_target === 'general') {
|
||||||
|
attrs = attr_table.save();
|
||||||
|
attr_multi.update(attrs);
|
||||||
|
attr_multi.value_changed.notify([], attr_multi);
|
||||||
|
|
||||||
|
// permission plugin resets ipapermlocation to basedn when
|
||||||
|
// type is unset. -> use it as pristine value so undo will
|
||||||
|
// work correctly.
|
||||||
|
var loc = [IPA.env.basedn];
|
||||||
|
loc_w.update(loc);
|
||||||
|
loc_f.values = loc;
|
||||||
|
} else {
|
||||||
|
attrs = attr_multi.save();
|
||||||
|
attr_table.update(attrs);
|
||||||
|
// notification will be done by `set_attrs_type`
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
that.set_attrs_type(type, true);
|
||||||
|
};
|
||||||
|
|
||||||
that.set_attrs_type = function(type, skip_unmatched) {
|
that.set_attrs_type = function(type, skip_unmatched) {
|
||||||
var attribute_field = that.container.fields.get_field('attrs');
|
var attribute_field = that.container.fields.get_field('attrs');
|
||||||
var attribute_table = that.permission_target.widgets.get_widget('attrs');
|
var attribute_table = that.permission_target.widgets.get_widget('attrs');
|
||||||
@@ -824,16 +895,19 @@ IPA.permission_target_policy = function (spec) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
that.post_create = function() {
|
that.post_create = function() {
|
||||||
that.select_target(that.permission_target.targets[0]);
|
that.select_target(aci.default_target);
|
||||||
};
|
};
|
||||||
|
|
||||||
that.post_load = function(data) {
|
that.post_load = function(data) {
|
||||||
|
|
||||||
var displayed_target;
|
var displayed_target = 'general';
|
||||||
|
var permtype = data.result.result.ipapermissiontype;
|
||||||
|
that.managed = permtype && permtype.indexOf("MANAGED") > -1;
|
||||||
|
that.system = permtype && permtype.indexOf("SYSTEM") > -1 && permtype.length === 1;
|
||||||
|
|
||||||
for (var target in that.target_mapping) {
|
for (var target in that.target_mapping) {
|
||||||
|
var property = that.target_mapping[target].property;
|
||||||
if (data.result.result[target]) {
|
if (property && data.result.result[property]) {
|
||||||
displayed_target = target;
|
displayed_target = target;
|
||||||
} else {
|
} else {
|
||||||
that.set_target_visible(target, false);
|
that.set_target_visible(target, false);
|
||||||
@@ -855,42 +929,42 @@ IPA.permission_target_policy = function (spec) {
|
|||||||
that.set_target_visible = function(target, visible) {
|
that.set_target_visible = function(target, visible) {
|
||||||
|
|
||||||
var target_info = that.target_mapping[target];
|
var target_info = that.target_mapping[target];
|
||||||
that.set_target_visible_core(target_info, visible);
|
|
||||||
};
|
|
||||||
|
|
||||||
that.set_target_visible_core = function(target_info, visible) {
|
for (var i=0,l=target_info.fields.length; i<l; i++) {
|
||||||
var widget = that.permission_target.widgets.get_widget(target_info.name);
|
var info = target_info.fields[i];
|
||||||
var field = that.container.fields.get_field(target_info.name);
|
that.set_target_row_visible(info, visible);
|
||||||
that.permission_target.set_row_visible(target_info.name, visible);
|
|
||||||
field.enabled = visible;
|
|
||||||
field.set_required(visible && target_info.required);
|
|
||||||
widget.hidden = !visible;
|
|
||||||
|
|
||||||
if (target_info.additional) {
|
|
||||||
for (var i=0; i<target_info.additional.length; i++) {
|
|
||||||
var nested_info = target_info.additional[i];
|
|
||||||
that.set_target_visible_core(nested_info, visible);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (visible && target_info.action) target_info.action();
|
if (visible && target_info.action) target_info.action();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
that.set_target_row_visible = function(target_info, visible) {
|
||||||
|
var widget = that.permission_target.widgets.get_widget(target_info.name);
|
||||||
|
var field = that.container.fields.get_field(target_info.name);
|
||||||
|
that.permission_target.set_row_visible(target_info.name, visible);
|
||||||
|
var managed_f = aci.managed_fields.indexOf(target_info.name) > -1;
|
||||||
|
var enabled = !(managed_f && that.managed) && visible && !that.system;
|
||||||
|
field.set_enabled(enabled);
|
||||||
|
field.set_required(visible && target_info.required);
|
||||||
|
widget.hidden = !visible;
|
||||||
|
};
|
||||||
|
|
||||||
that.target_mapping = {
|
that.target_mapping = {
|
||||||
filter: {
|
general: {
|
||||||
name: 'filter',
|
fields: [
|
||||||
required: true,
|
|
||||||
additional: [
|
|
||||||
{
|
{
|
||||||
name: 'attrs_multi'
|
name: 'extratargetfilter'
|
||||||
}
|
},
|
||||||
]
|
{
|
||||||
},
|
name: 'ipapermlocation',
|
||||||
subtree: {
|
required: true
|
||||||
name: 'subtree',
|
},
|
||||||
required: true,
|
{
|
||||||
additional: [
|
name: 'ipapermtarget'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'type'
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: 'memberof'
|
name: 'memberof'
|
||||||
},
|
},
|
||||||
@@ -899,26 +973,23 @@ IPA.permission_target_policy = function (spec) {
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
targetgroup: {
|
|
||||||
name: 'targetgroup',
|
|
||||||
required: true,
|
|
||||||
additional: [
|
|
||||||
{
|
|
||||||
name: 'attrs'
|
|
||||||
}
|
|
||||||
],
|
|
||||||
action: function() {
|
|
||||||
that.set_attrs_type('group', false);
|
|
||||||
}
|
|
||||||
},
|
|
||||||
type: {
|
type: {
|
||||||
name: 'type',
|
property: 'type',
|
||||||
additional: [
|
fields: [
|
||||||
|
{
|
||||||
|
name: 'extratargetfilter'
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: 'memberof'
|
name: 'memberof'
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: 'type'
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: 'attrs'
|
name: 'attrs'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: 'ipapermtarget'
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
action: function() {
|
action: function() {
|
||||||
@@ -931,59 +1002,88 @@ IPA.permission_target_policy = function (spec) {
|
|||||||
return that;
|
return that;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Facet policy which shows and hides managed section based on presence
|
||||||
|
* "MANAGED" in ippapermissiontype attribute
|
||||||
|
* @class aci.permission_managed_policy
|
||||||
|
* @extends IPA.facet_policy
|
||||||
|
*/
|
||||||
|
aci.permission_managed_policy = function (spec) {
|
||||||
|
|
||||||
|
var that = IPA.facet_policy();
|
||||||
|
|
||||||
|
that.post_load = function(data) {
|
||||||
|
var permtype = data.result.result.ipapermissiontype;
|
||||||
|
var managed = permtype && permtype.indexOf("MANAGED") > -1;
|
||||||
|
var system = permtype && permtype.indexOf("SYSTEM") > -1 && permtype.length === 1;
|
||||||
|
var m_section = that.container.widgets.get_widget("managed");
|
||||||
|
m_section.set_visible(managed);
|
||||||
|
|
||||||
|
var fields = that.container.fields.get_fields();
|
||||||
|
for (var i=0, l=fields.length; i<l; i++) {
|
||||||
|
var field = fields[i];
|
||||||
|
if (field.read_only) continue;
|
||||||
|
var managed_f = aci.managed_fields.indexOf(field.name) > -1;
|
||||||
|
field.set_enabled(!system && !(managed_f && managed));
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
return that;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Permission entity spec
|
* Permission entity spec
|
||||||
* @member aci
|
* @member aci
|
||||||
*/
|
*/
|
||||||
exp.permission_entity_spec = make_permission_spec();
|
aci.permission_entity_spec = make_permission_spec();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Privilege entity spec
|
* Privilege entity spec
|
||||||
* @member aci
|
* @member aci
|
||||||
*/
|
*/
|
||||||
exp.privilege_entity_spec = make_privilege_spec();
|
aci.privilege_entity_spec = make_privilege_spec();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Role entity spec
|
* Role entity spec
|
||||||
* @member aci
|
* @member aci
|
||||||
*/
|
*/
|
||||||
exp.role_entity_spec = make_role_spec();
|
aci.role_entity_spec = make_role_spec();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Self-service entity spec
|
* Self-service entity spec
|
||||||
* @member aci
|
* @member aci
|
||||||
*/
|
*/
|
||||||
exp.selfservice_entity_spec = make_selfservice_spec();
|
aci.selfservice_entity_spec = make_selfservice_spec();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Delegation entity spec
|
* Delegation entity spec
|
||||||
* @member aci
|
* @member aci
|
||||||
*/
|
*/
|
||||||
exp.delegation_entity_spec = make_delegation_spec();
|
aci.delegation_entity_spec = make_delegation_spec();
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register entities, widgets and fields to global registers.
|
* Register entities, widgets and fields to global registers.
|
||||||
* @member aci
|
* @member aci
|
||||||
*/
|
*/
|
||||||
exp.register = function() {
|
aci.register = function() {
|
||||||
var e = reg.entity;
|
var e = reg.entity;
|
||||||
var w = reg.widget;
|
var w = reg.widget;
|
||||||
var f = reg.field;
|
var f = reg.field;
|
||||||
|
|
||||||
e.register({ type: 'permission', spec: exp.permission_entity_spec });
|
e.register({ type: 'permission', spec: aci.permission_entity_spec });
|
||||||
e.register({ type: 'privilege', spec: exp.privilege_entity_spec });
|
e.register({ type: 'privilege', spec: aci.privilege_entity_spec });
|
||||||
e.register({ type: 'role', spec: exp.role_entity_spec });
|
e.register({ type: 'role', spec: aci.role_entity_spec });
|
||||||
e.register({ type: 'selfservice', spec: exp.selfservice_entity_spec });
|
e.register({ type: 'selfservice', spec: aci.selfservice_entity_spec });
|
||||||
e.register({ type: 'delegation', spec: exp.delegation_entity_spec });
|
e.register({ type: 'delegation', spec: aci.delegation_entity_spec });
|
||||||
|
|
||||||
w.register('attributes', IPA.attributes_widget);
|
w.register('attributes', aci.attributes_widget);
|
||||||
f.register('attributes', IPA.checkboxes_field);
|
f.register('attributes', IPA.checkboxes_field);
|
||||||
w.register('rights', IPA.rights_widget);
|
w.register('rights', aci.rights_widget);
|
||||||
f.register('rights', IPA.checkboxes_field);
|
f.register('rights', IPA.checkboxes_field);
|
||||||
w.register('permission_target', IPA.permission_target_widget);
|
w.register('permission_target', aci.permission_target_widget);
|
||||||
};
|
};
|
||||||
|
|
||||||
phases.on('registration', exp.register);
|
phases.on('registration', aci.register);
|
||||||
|
|
||||||
return exp;
|
return aci;
|
||||||
});
|
});
|
||||||
@@ -23,6 +23,7 @@
|
|||||||
* the AssociationList elements; IT NEEDS IT'S OWN CODE! */
|
* the AssociationList elements; IT NEEDS IT'S OWN CODE! */
|
||||||
|
|
||||||
define([
|
define([
|
||||||
|
'dojo/_base/lang',
|
||||||
'dojo/Deferred',
|
'dojo/Deferred',
|
||||||
'./metadata',
|
'./metadata',
|
||||||
'./ipa',
|
'./ipa',
|
||||||
@@ -35,7 +36,7 @@ define([
|
|||||||
'./facet',
|
'./facet',
|
||||||
'./search',
|
'./search',
|
||||||
'./dialog'],
|
'./dialog'],
|
||||||
function(Deferred, metadata_provider, IPA, $, navigation,
|
function(lang, Deferred, metadata_provider, IPA, $, navigation,
|
||||||
phases, reg, su, text) {
|
phases, reg, su, text) {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -233,6 +234,12 @@ IPA.association_adder_dialog = function(spec) {
|
|||||||
that.entity = IPA.get_entity(spec.entity);
|
that.entity = IPA.get_entity(spec.entity);
|
||||||
that.pkey = spec.pkey;
|
that.pkey = spec.pkey;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Map of options for search method
|
||||||
|
* @property {Object}
|
||||||
|
*/
|
||||||
|
that.search_options = spec.search_options;
|
||||||
|
|
||||||
that.other_entity = IPA.get_entity(spec.other_entity);
|
that.other_entity = IPA.get_entity(spec.other_entity);
|
||||||
that.attribute_member = spec.attribute_member;
|
that.attribute_member = spec.attribute_member;
|
||||||
|
|
||||||
@@ -277,6 +284,10 @@ IPA.association_adder_dialog = function(spec) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var options = { all: true };
|
var options = { all: true };
|
||||||
|
if (that.search_options) {
|
||||||
|
lang.mixin(options, that.search_options);
|
||||||
|
}
|
||||||
|
|
||||||
var relationships = that.other_entity.metadata.relationships;
|
var relationships = that.other_entity.metadata.relationships;
|
||||||
|
|
||||||
/* TODO: better generic handling of different relationships! */
|
/* TODO: better generic handling of different relationships! */
|
||||||
@@ -947,6 +958,12 @@ exp.association_facet = IPA.association_facet = function (spec, no_init) {
|
|||||||
|
|
||||||
that.adder_columns = $.ordered_map();
|
that.adder_columns = $.ordered_map();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Map of search options for adder dialog
|
||||||
|
* @property {Object}
|
||||||
|
*/
|
||||||
|
that.search_options = spec.search_options;
|
||||||
|
|
||||||
that.get_adder_column = function(name) {
|
that.get_adder_column = function(name) {
|
||||||
return that.adder_columns.get(name);
|
return that.adder_columns.get(name);
|
||||||
};
|
};
|
||||||
@@ -1110,7 +1127,8 @@ exp.association_facet = IPA.association_facet = function (spec, no_init) {
|
|||||||
pkey: pkey,
|
pkey: pkey,
|
||||||
other_entity: that.other_entity,
|
other_entity: that.other_entity,
|
||||||
attribute_member: that.attribute_member,
|
attribute_member: that.attribute_member,
|
||||||
exclude: pkeys
|
exclude: pkeys,
|
||||||
|
search_options: that.search_options
|
||||||
});
|
});
|
||||||
|
|
||||||
var adder_columns = that.adder_columns.values;
|
var adder_columns = that.adder_columns.values;
|
||||||
|
|||||||
@@ -684,7 +684,7 @@ exp.details_facet = IPA.details_facet = function(spec, no_init) {
|
|||||||
that.is_dirty = function() {
|
that.is_dirty = function() {
|
||||||
var fields = that.fields.get_fields();
|
var fields = that.fields.get_fields();
|
||||||
for (var i=0; i<fields.length; i++) {
|
for (var i=0; i<fields.length; i++) {
|
||||||
if (fields[i].is_dirty()) {
|
if (fields[i].enabled && fields[i].is_dirty()) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -734,18 +734,15 @@ exp.details_facet = IPA.details_facet = function(spec, no_init) {
|
|||||||
*/
|
*/
|
||||||
that.save_as_update_info = function(only_dirty, require_value) {
|
that.save_as_update_info = function(only_dirty, require_value) {
|
||||||
|
|
||||||
var record = {};
|
|
||||||
var update_info = IPA.update_info_builder.new_update_info();
|
var update_info = IPA.update_info_builder.new_update_info();
|
||||||
var fields = that.fields.get_fields();
|
var fields = that.fields.get_fields();
|
||||||
|
|
||||||
that.save(record);
|
|
||||||
|
|
||||||
for (var i=0; i<fields.length; i++) {
|
for (var i=0; i<fields.length; i++) {
|
||||||
var field = fields[i];
|
var field = fields[i];
|
||||||
|
|
||||||
if (only_dirty && !field.is_dirty()) continue;
|
if (!field.enabled || only_dirty && !field.is_dirty()) continue;
|
||||||
|
|
||||||
var values = record[field.param];
|
var values = field.save();
|
||||||
if (require_value && !values) continue;
|
if (require_value && !values) continue;
|
||||||
|
|
||||||
update_info.append_field(field, values);
|
update_info.append_field(field, values);
|
||||||
|
|||||||
@@ -676,7 +676,7 @@ IPA.multivalued_widget = function(spec) {
|
|||||||
|
|
||||||
var that = IPA.input_widget(spec);
|
var that = IPA.input_widget(spec);
|
||||||
|
|
||||||
that.widget_factory = spec.widget_factory || IPA.text_widget;
|
that.child_spec = spec.child_spec;
|
||||||
that.size = spec.size || 30;
|
that.size = spec.size || 30;
|
||||||
that.undo_control;
|
that.undo_control;
|
||||||
that.initialized = false;
|
that.initialized = false;
|
||||||
@@ -811,14 +811,18 @@ IPA.multivalued_widget = function(spec) {
|
|||||||
|
|
||||||
row.container = $('<div/>', { name: 'value'});
|
row.container = $('<div/>', { name: 'value'});
|
||||||
|
|
||||||
row.widget = that.widget_factory({
|
var spec = that.child_spec || {};
|
||||||
name: that.name+'-'+row_index,
|
if (typeof spec !== 'function') {
|
||||||
undo: that.undo || row.is_new,
|
lang.mixin(spec, {
|
||||||
read_only: that.read_only,
|
name: that.name+'-'+row_index,
|
||||||
writable: that.writable,
|
undo: that.undo || row.is_new,
|
||||||
enabled: that.enabled
|
read_only: that.read_only,
|
||||||
});
|
writable: that.writable,
|
||||||
|
enabled: that.enabled
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
row.widget = builder.build('widget', spec);
|
||||||
row.widget.create(row.container);
|
row.widget.create(row.container);
|
||||||
|
|
||||||
row.original_values = values;
|
row.original_values = values;
|
||||||
@@ -1415,7 +1419,7 @@ IPA.option_widget_base = function(spec, that) {
|
|||||||
|
|
||||||
that.set_enabled = function(enabled) {
|
that.set_enabled = function(enabled) {
|
||||||
|
|
||||||
that.enabled = enabled;
|
that.widget_set_enabled(enabled);
|
||||||
that.update_enabled(enabled);
|
that.update_enabled(enabled);
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -4718,7 +4722,7 @@ IPA.widget_builder = function(spec) {
|
|||||||
IPA.sshkeys_widget = function(spec) {
|
IPA.sshkeys_widget = function(spec) {
|
||||||
|
|
||||||
spec = spec || {};
|
spec = spec || {};
|
||||||
spec.widget_factory = IPA.sshkey_widget;
|
spec.child_spec = IPA.sshkey_widget;
|
||||||
|
|
||||||
var that = IPA.multivalued_widget(spec);
|
var that = IPA.multivalued_widget(spec);
|
||||||
|
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
/* Authors:
|
/* Authors:
|
||||||
* Adam Young <ayoung@redhat.com>
|
* Adam Young <ayoung@redhat.com>
|
||||||
|
* Petr Vobornik <pvoborni@redhat.com>
|
||||||
*
|
*
|
||||||
* Copyright (C) 2010 Red Hat
|
* Copyright (C) 2010 Red Hat
|
||||||
* see file 'COPYING' for use and warranty information
|
* see file 'COPYING' for use and warranty information
|
||||||
@@ -59,31 +60,32 @@ module('aci', {
|
|||||||
entity: entity,
|
entity: entity,
|
||||||
fields: [
|
fields: [
|
||||||
{
|
{
|
||||||
$type: 'select',
|
$type: 'radio',
|
||||||
name: 'target',
|
name: 'target',
|
||||||
widget: 'target.target',
|
widget: 'target.target',
|
||||||
enabled: false
|
enabled: false
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'filter',
|
$type: 'multivalued',
|
||||||
widget: 'target.filter',
|
name: 'extratargetfilter',
|
||||||
|
widget: 'target.extratargetfilter',
|
||||||
|
acl_param: 'ipapermtargetfilter',
|
||||||
enabled: false
|
enabled: false
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
$type: 'entity_select',
|
$type: 'multivalued',
|
||||||
name: 'memberof',
|
name: 'memberof',
|
||||||
widget: 'target.memberof',
|
widget: 'target.memberof',
|
||||||
enabled: false
|
enabled: false
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
name: 'subtree',
|
name: 'ipapermlocation',
|
||||||
widget: 'target.subtree',
|
widget: 'target.ipapermlocation',
|
||||||
enabled: false
|
enabled: false
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
$type: 'entity_select',
|
name: 'ipapermtarget',
|
||||||
name: 'targetgroup',
|
widget: 'target.ipapermtarget',
|
||||||
widget: 'target.targetgroup',
|
|
||||||
enabled: false
|
enabled: false
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -108,7 +110,7 @@ module('aci', {
|
|||||||
widgets: [
|
widgets: [
|
||||||
{
|
{
|
||||||
$type: 'permission_target',
|
$type: 'permission_target',
|
||||||
container_factory: IPA.details_table_section,
|
container_factory: IPA.details_section,
|
||||||
group_entity: group_entity,
|
group_entity: group_entity,
|
||||||
name: 'target',
|
name: 'target',
|
||||||
label: 'Target',
|
label: 'Target',
|
||||||
@@ -117,7 +119,7 @@ module('aci', {
|
|||||||
],
|
],
|
||||||
policies: [
|
policies: [
|
||||||
{
|
{
|
||||||
$factory: IPA.permission_target_policy,
|
$factory: aci.permission_target_policy,
|
||||||
widget_name: 'target'
|
widget_name: 'target'
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -129,12 +131,12 @@ module('aci', {
|
|||||||
target_widget = target_facet.widgets.get_widget('target');
|
target_widget = target_facet.widgets.get_widget('target');
|
||||||
},
|
},
|
||||||
teardown: function() {
|
teardown: function() {
|
||||||
target_container.remove();
|
target_container.remove();
|
||||||
}}
|
}}
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
||||||
test("IPA.attributes_widget.", function() {
|
test("aci.attributes_widget", function() {
|
||||||
|
|
||||||
var aciattrs = md.source.objects.user.aciattrs;
|
var aciattrs = md.source.objects.user.aciattrs;
|
||||||
|
|
||||||
@@ -142,7 +144,7 @@ test("IPA.attributes_widget.", function() {
|
|||||||
name: 'attrs'
|
name: 'attrs'
|
||||||
});
|
});
|
||||||
|
|
||||||
var widget = IPA.attributes_widget({
|
var widget = aci.attributes_widget({
|
||||||
name: 'attrs',
|
name: 'attrs',
|
||||||
object_type: 'user',
|
object_type: 'user',
|
||||||
entity:entity
|
entity:entity
|
||||||
@@ -156,6 +158,7 @@ test("IPA.attributes_widget.", function() {
|
|||||||
table,
|
table,
|
||||||
'Widget contains table');
|
'Widget contains table');
|
||||||
|
|
||||||
|
widget.update({});
|
||||||
var tr = $('tbody tr', table);
|
var tr = $('tbody tr', table);
|
||||||
|
|
||||||
same(
|
same(
|
||||||
@@ -187,13 +190,13 @@ test("IPA.attributes_widget.", function() {
|
|||||||
'All loaded values are saved and sorted');
|
'All loaded values are saved and sorted');
|
||||||
});
|
});
|
||||||
|
|
||||||
test("IPA.rights_widget.", function() {
|
test("aci.rights_widget.", function() {
|
||||||
|
|
||||||
var container = $('<span/>', {
|
var container = $('<span/>', {
|
||||||
name: 'permissions'
|
name: 'permissions'
|
||||||
});
|
});
|
||||||
|
|
||||||
var widget = IPA.rights_widget({
|
var widget = aci.rights_widget({
|
||||||
name: 'permissions',
|
name: 'permissions',
|
||||||
entity:entity
|
entity:entity
|
||||||
});
|
});
|
||||||
@@ -224,25 +227,6 @@ var get_visible_rows = function(section) {
|
|||||||
return visible;
|
return visible;
|
||||||
};
|
};
|
||||||
|
|
||||||
test("Testing aci grouptarget.", function() {
|
|
||||||
var data = {};
|
|
||||||
data.result = {};
|
|
||||||
data.result.result = {
|
|
||||||
targetgroup: 'ipausers'
|
|
||||||
};
|
|
||||||
|
|
||||||
target_facet.load(data);
|
|
||||||
|
|
||||||
same(target_widget.target, 'targetgroup' , 'group control selected');
|
|
||||||
|
|
||||||
|
|
||||||
same(get_visible_rows(target_widget), ['targetgroup', 'attrs'],
|
|
||||||
'group select row visible');
|
|
||||||
|
|
||||||
ok ($('option', target_widget.group_select.container).length > 2,
|
|
||||||
'group select populated');
|
|
||||||
|
|
||||||
});
|
|
||||||
|
|
||||||
test("Testing type target.", function() {
|
test("Testing type target.", function() {
|
||||||
var data = {};
|
var data = {};
|
||||||
@@ -262,7 +246,8 @@ test("Testing type target.", function() {
|
|||||||
same(record.type[0], data.result.result.type,
|
same(record.type[0], data.result.result.type,
|
||||||
"saved type matches sample data");
|
"saved type matches sample data");
|
||||||
|
|
||||||
same(get_visible_rows(target_widget), ['memberof', 'type', 'attrs'],
|
same(get_visible_rows(target_widget), ['type', 'extratargetfilter',
|
||||||
|
'ipapermtarget', 'memberof', 'attrs'],
|
||||||
'type and attrs rows visible');
|
'type and attrs rows visible');
|
||||||
|
|
||||||
ok((record.attrs.length > 10),
|
ok((record.attrs.length > 10),
|
||||||
@@ -270,12 +255,12 @@ test("Testing type target.", function() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
test("Testing filter target.", function() {
|
test("Testing general target.", function() {
|
||||||
|
|
||||||
var data = {};
|
var data = {};
|
||||||
data.result = {};
|
data.result = {};
|
||||||
data.result.result = {
|
data.result.result = {
|
||||||
filter: 'somevalue'
|
extratargetfilter: 'somevalue'
|
||||||
};
|
};
|
||||||
|
|
||||||
target_facet.load(data);
|
target_facet.load(data);
|
||||||
@@ -283,30 +268,13 @@ test("Testing filter target.", function() {
|
|||||||
var record = {};
|
var record = {};
|
||||||
target_facet.save(record);
|
target_facet.save(record);
|
||||||
|
|
||||||
same(target_widget.target, 'filter', 'filter selected');
|
same(target_widget.target, 'general', 'general selected');
|
||||||
|
|
||||||
same(get_visible_rows(target_widget), ['filter', 'attrs_multi'], 'filter row visible');
|
same(get_visible_rows(target_widget), ['type', 'ipapermlocation',
|
||||||
|
'extratargetfilter', 'ipapermtarget', 'memberof',
|
||||||
|
'attrs_multi'], 'general target fields visible');
|
||||||
|
|
||||||
ok(record.filter[0], data.result.result.filter, 'filter set correctly');
|
same(record.extratargetfilter[0], data.result.result.extratargetfilter, 'filter set correctly');
|
||||||
});
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
test("Testing subtree target.", function() {
|
|
||||||
|
|
||||||
var data = {};
|
|
||||||
data.result = {};
|
|
||||||
data.result.result = {
|
|
||||||
subtree: 'ldap:///cn=*,cn=roles,cn=accounts,dc=example,dc=co'
|
|
||||||
};
|
|
||||||
|
|
||||||
target_facet.load(data);
|
|
||||||
var record = {};
|
|
||||||
target_facet.save(record);
|
|
||||||
|
|
||||||
same(record.subtree[0], data.result.result.subtree, 'subtree set correctly');
|
|
||||||
|
|
||||||
same(get_visible_rows(target_widget), ['memberof', 'subtree', 'attrs_multi'], 'subtree row visible');
|
|
||||||
});
|
});
|
||||||
|
|
||||||
};});
|
};});
|
||||||
@@ -371,9 +371,8 @@
|
|||||||
"enable": "Enable token"
|
"enable": "Enable token"
|
||||||
},
|
},
|
||||||
"permission": {
|
"permission": {
|
||||||
"identity": "Identity",
|
"identity": "Permission settings",
|
||||||
"invalid_target": "Permission with invalid target specification",
|
"managed": "Attribute breakdown",
|
||||||
"rights": "Rights",
|
|
||||||
"target": "Target"
|
"target": "Target"
|
||||||
},
|
},
|
||||||
"privilege": {
|
"privilege": {
|
||||||
|
|||||||
@@ -506,9 +506,8 @@ class i18n_messages(Command):
|
|||||||
"enable": "Enable token",
|
"enable": "Enable token",
|
||||||
},
|
},
|
||||||
"permission": {
|
"permission": {
|
||||||
"identity": _("Identity"),
|
"identity": _("Permission settings"),
|
||||||
"invalid_target": _("Permission with invalid target specification"),
|
"managed": _("Attribute breakdown"),
|
||||||
"rights": _("Rights"),
|
|
||||||
"target": _("Target"),
|
"target": _("Target"),
|
||||||
},
|
},
|
||||||
"privilege": {
|
"privilege": {
|
||||||
|
|||||||
@@ -57,11 +57,14 @@ PERMISSION_DATA = {
|
|||||||
'pkey': PERMISSION_PKEY,
|
'pkey': PERMISSION_PKEY,
|
||||||
'add': [
|
'add': [
|
||||||
('textbox', 'cn', PERMISSION_PKEY),
|
('textbox', 'cn', PERMISSION_PKEY),
|
||||||
('checkbox', 'permissions', 'write'),
|
('checkbox', 'ipapermright', 'write'),
|
||||||
('textbox', 'filter', 'cn=user'),
|
('checkbox', 'ipapermright', 'read'),
|
||||||
|
('selectbox', 'type', 'user'),
|
||||||
|
('table', 'attrs', 'audio'),
|
||||||
|
('table', 'attrs', 'cn'),
|
||||||
],
|
],
|
||||||
'mod': [
|
'mod': [
|
||||||
('textbox', 'filter', 'cn=user2'),
|
('table', 'attrs', 'carlicense'),
|
||||||
],
|
],
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user