var React = require('react'), cx = require('react/lib/cx'); import {filter, pluck, includes} from 'lodash'; var PermissionsTable = require('./permissions_table'); var PermissionsSummary = React.createClass({ displayName: 'PermissionsSummary', render() { var expand = ''; if (this.props.length > 0) { expand = (
Show all »
); } return (
{this.props.length} permissions {expand}
); } }); export default React.createClass({ displayName: 'Permissions', getDefaultProps() { return { resources: [], roles: [] }; }, getInitialState() { return { expand: false }; }, expand() { this.setState({expand: true}); }, collapse() { this.setState({expand: false}); }, setPermissions(_resources) { /** * Filter out owned resources. * Filter out permissions on resources which are not held by the current role. */ var resources; if (this.props.owned) { var ownedIds = pluck(this.props.owned, 'id'); resources = filter(_resources, function(r) { return !includes(ownedIds, r.id); }); } else { resources = _resources; } var roleSet = {}; this.props.roles.forEach(function(r) { roleSet[r] = r; }); var cleanResources = filter(resources, function(item) { // assets of 'secret' kind are internal return item.id.split(':')[1] !== 'secret'; }); cleanResources.forEach(function(resource) { var permissions = resource.permissions, hasPermissions = []; permissions.forEach(function(permission) { if (roleSet.hasOwnProperty(permission.role)) { hasPermissions.push(permission); } }); resource.permissions = hasPermissions; }); return cleanResources; }, render() { var resources = this.setPermissions(this.props.resources); var content; if (this.state.expand || this.props.tabview) { content = ( ); } else { content = ( ); } var classes = cx({ permissions: true, loading: false }); var permissionsheader = this.props.tabview ? '' : (

Permissions held

); return (
{permissionsheader}
{content}
); } });