Fix permissions on view token overlay

pull/13645/head
Palak Bhojani 2019-04-25 15:09:59 -07:00
parent ab8d964a85
commit 1a9441c86a
5 changed files with 541 additions and 18 deletions

View File

@ -25,6 +25,10 @@ import {
Task as TaskApi,
Organization,
Variable,
Authorization,
AuthorizationUpdateRequest,
Permission,
PermissionResource,
} from '@influxdata/influx'
export const links: Links = {
@ -679,3 +683,237 @@ export const scraperTargets = [
url: 'http://localhost:9999/metrics',
},
]
export const auth: Authorization = {
id: '03c03a8a64728000',
token:
'RcW2uWiD-vfxujKyJCirK8un3lJsWPfiA6ulmWY_SlSITUal7Z180OwExiKKfrO98X8W6qGrd5hSGdag-hEpWw==',
status: AuthorizationUpdateRequest.StatusEnum.Active,
description: 'My token',
orgID: '039edab314789000',
org: 'a',
userID: '039edab303789000',
user: 'adminuser',
permissions: [
{
action: Permission.ActionEnum.Read,
resource: {
type: PermissionResource.TypeEnum.Orgs,
id: '039edab314789000',
name: 'a',
},
},
{
action: Permission.ActionEnum.Read,
resource: {
type: PermissionResource.TypeEnum.Authorizations,
orgID: '039edab314789000',
org: 'a',
},
},
{
action: Permission.ActionEnum.Write,
resource: {
type: PermissionResource.TypeEnum.Authorizations,
orgID: '039edab314789000',
org: 'a',
},
},
{
action: Permission.ActionEnum.Read,
resource: {
type: PermissionResource.TypeEnum.Buckets,
orgID: '039edab314789000',
org: 'a',
},
},
{
action: Permission.ActionEnum.Write,
resource: {
type: PermissionResource.TypeEnum.Buckets,
orgID: '039edab314789000',
org: 'a',
},
},
{
action: Permission.ActionEnum.Read,
resource: {
type: PermissionResource.TypeEnum.Dashboards,
orgID: '039edab314789000',
org: 'a',
},
},
{
action: Permission.ActionEnum.Write,
resource: {
type: PermissionResource.TypeEnum.Dashboards,
orgID: '039edab314789000',
org: 'a',
},
},
{
action: Permission.ActionEnum.Read,
resource: {
type: PermissionResource.TypeEnum.Sources,
orgID: '039edab314789000',
org: 'a',
},
},
{
action: Permission.ActionEnum.Write,
resource: {
type: PermissionResource.TypeEnum.Sources,
orgID: '039edab314789000',
org: 'a',
},
},
{
action: Permission.ActionEnum.Read,
resource: {
type: PermissionResource.TypeEnum.Tasks,
orgID: '039edab314789000',
org: 'a',
},
},
{
action: Permission.ActionEnum.Write,
resource: {
type: PermissionResource.TypeEnum.Tasks,
orgID: '039edab314789000',
org: 'a',
},
},
{
action: Permission.ActionEnum.Read,
resource: {
type: PermissionResource.TypeEnum.Telegrafs,
orgID: '039edab314789000',
org: 'a',
},
},
{
action: Permission.ActionEnum.Write,
resource: {
type: PermissionResource.TypeEnum.Telegrafs,
orgID: '039edab314789000',
org: 'a',
},
},
{
action: Permission.ActionEnum.Read,
resource: {
type: PermissionResource.TypeEnum.Users,
orgID: '039edab314789000',
org: 'a',
},
},
{
action: Permission.ActionEnum.Write,
resource: {
type: PermissionResource.TypeEnum.Users,
orgID: '039edab314789000',
org: 'a',
},
},
{
action: Permission.ActionEnum.Read,
resource: {
type: PermissionResource.TypeEnum.Variables,
orgID: '039edab314789000',
org: 'a',
},
},
{
action: Permission.ActionEnum.Write,
resource: {
type: PermissionResource.TypeEnum.Variables,
orgID: '039edab314789000',
org: 'a',
},
},
{
action: Permission.ActionEnum.Read,
resource: {
type: PermissionResource.TypeEnum.Scrapers,
orgID: '039edab314789000',
org: 'a',
},
},
{
action: Permission.ActionEnum.Write,
resource: {
type: PermissionResource.TypeEnum.Scrapers,
orgID: '039edab314789000',
org: 'a',
},
},
{
action: Permission.ActionEnum.Read,
resource: {
type: PermissionResource.TypeEnum.Secrets,
orgID: '039edab314789000',
org: 'a',
},
},
{
action: Permission.ActionEnum.Write,
resource: {
type: PermissionResource.TypeEnum.Secrets,
orgID: '039edab314789000',
org: 'a',
},
},
{
action: Permission.ActionEnum.Read,
resource: {
type: PermissionResource.TypeEnum.Labels,
orgID: '039edab314789000',
org: 'a',
},
},
{
action: Permission.ActionEnum.Write,
resource: {
type: PermissionResource.TypeEnum.Labels,
orgID: '039edab314789000',
org: 'a',
},
},
{
action: Permission.ActionEnum.Read,
resource: {
type: PermissionResource.TypeEnum.Views,
orgID: '039edab314789000',
org: 'a',
},
},
{
action: Permission.ActionEnum.Write,
resource: {
type: PermissionResource.TypeEnum.Views,
orgID: '039edab314789000',
org: 'a',
},
},
{
action: Permission.ActionEnum.Read,
resource: {
type: PermissionResource.TypeEnum.Documents,
orgID: '039edab314789000',
org: 'a',
},
},
{
action: Permission.ActionEnum.Write,
resource: {
type: PermissionResource.TypeEnum.Documents,
orgID: '039edab314789000',
org: 'a',
},
},
],
links: {
self: '/api/v2/authorizations/03c03a8a64728000',
user: '/api/v2/users/039edab303789000',
},
}

View File

@ -6,7 +6,8 @@ import {shallow} from 'enzyme'
import ViewTokenOverlay from 'src/authorizations/components/ViewTokenOverlay'
// Fixtures
import {authorization as auth} from 'src/authorizations/apis/__mocks__/data'
import {auth} from 'mocks/dummyData'
import {permissions} from 'src/utils/permissions'
const setup = (override?) => {
const props = {
@ -14,18 +15,41 @@ const setup = (override?) => {
...override,
}
const wrapper = shallow(<ViewTokenOverlay {...props} />)
return {wrapper}
return shallow(<ViewTokenOverlay {...props} />)
}
describe('Account', () => {
describe('rendering', () => {
it('renders!', () => {
const {wrapper} = setup()
const wrapper = setup()
expect(wrapper.exists()).toBe(true)
expect(wrapper).toMatchSnapshot()
})
})
describe('if there is all access tokens', () => {
it('renders permissions correctly', () => {
const actual = permissions(auth.permissions)
const expected = {
'orgs-a': ['read'],
authorizations: ['read', 'write'],
buckets: ['read', 'write'],
dashboards: ['read', 'write'],
sources: ['read', 'write'],
tasks: ['read', 'write'],
telegrafs: ['read', 'write'],
users: ['read', 'write'],
variables: ['read', 'write'],
scrapers: ['read', 'write'],
secrets: ['read', 'write'],
labels: ['read', 'write'],
views: ['read', 'write'],
documents: ['read', 'write'],
}
expect(actual).toEqual(expected)
})
})
})

View File

@ -62,16 +62,18 @@ export default class ViewTokenOverlay extends PureComponent<Props> {
const p = this.props.auth.permissions.reduce((acc, {action, resource}) => {
const {type} = resource
const name = get(resource, 'name', '')
let key = `${type}-${name}`
let actions = get(resource, key, [])
let key = `${type}`
if (name) {
key = `${type}-${name}`
}
let actions = get(acc, key, [])
if (name && actions) {
return {...acc, [key]: [...actions, action]}
}
actions = get(resource, type, [])
actions = get(acc, key || resource.type, [])
return {...acc, [type]: [...actions, action]}
}, {})

View File

@ -6,11 +6,11 @@ exports[`Account rendering renders! 1`] = `
>
<OverlayHeading
onDismiss={[Function]}
title="im a token"
title="My token"
/>
<OverlayBody>
<CodeSnippet
copyText="ohEmfY80A9UsW_cicNXgOMIPIsUvU6K9YcpTfCPQE3NV8Y6nTsCwVghczATBPyQh96CoZkOW5DIKldya6Y84KA=="
copyText="RcW2uWiD-vfxujKyJCirK8un3lJsWPfiA6ulmWY_SlSITUal7Z180OwExiKKfrO98X8W6qGrd5hSGdag-hEpWw=="
label="Code Snippet"
/>
<PermissionsWidget
@ -18,14 +18,33 @@ exports[`Account rendering renders! 1`] = `
mode="read"
>
<PermissionsWidgetSection
id="orgs"
key="orgs"
id="orgs-a"
key="orgs-a"
mode="read"
title="orgs"
title="orgs-a"
>
<PermissionsWidgetItem
id="orgs-write-orgs-orgs"
id="orgs-a-read-orgs-a-orgs-a"
key="0"
label="read"
selected="selected"
/>
</PermissionsWidgetSection>
<PermissionsWidgetSection
id="authorizations"
key="authorizations"
mode="read"
title="authorizations"
>
<PermissionsWidgetItem
id="authorizations-read-authorizations-authorizations"
key="0"
label="read"
selected="selected"
/>
<PermissionsWidgetItem
id="authorizations-write-authorizations-authorizations"
key="1"
label="write"
selected="selected"
/>
@ -37,8 +56,223 @@ exports[`Account rendering renders! 1`] = `
title="buckets"
>
<PermissionsWidgetItem
id="buckets-write-buckets-buckets"
id="buckets-read-buckets-buckets"
key="0"
label="read"
selected="selected"
/>
<PermissionsWidgetItem
id="buckets-write-buckets-buckets"
key="1"
label="write"
selected="selected"
/>
</PermissionsWidgetSection>
<PermissionsWidgetSection
id="dashboards"
key="dashboards"
mode="read"
title="dashboards"
>
<PermissionsWidgetItem
id="dashboards-read-dashboards-dashboards"
key="0"
label="read"
selected="selected"
/>
<PermissionsWidgetItem
id="dashboards-write-dashboards-dashboards"
key="1"
label="write"
selected="selected"
/>
</PermissionsWidgetSection>
<PermissionsWidgetSection
id="sources"
key="sources"
mode="read"
title="sources"
>
<PermissionsWidgetItem
id="sources-read-sources-sources"
key="0"
label="read"
selected="selected"
/>
<PermissionsWidgetItem
id="sources-write-sources-sources"
key="1"
label="write"
selected="selected"
/>
</PermissionsWidgetSection>
<PermissionsWidgetSection
id="tasks"
key="tasks"
mode="read"
title="tasks"
>
<PermissionsWidgetItem
id="tasks-read-tasks-tasks"
key="0"
label="read"
selected="selected"
/>
<PermissionsWidgetItem
id="tasks-write-tasks-tasks"
key="1"
label="write"
selected="selected"
/>
</PermissionsWidgetSection>
<PermissionsWidgetSection
id="telegrafs"
key="telegrafs"
mode="read"
title="telegrafs"
>
<PermissionsWidgetItem
id="telegrafs-read-telegrafs-telegrafs"
key="0"
label="read"
selected="selected"
/>
<PermissionsWidgetItem
id="telegrafs-write-telegrafs-telegrafs"
key="1"
label="write"
selected="selected"
/>
</PermissionsWidgetSection>
<PermissionsWidgetSection
id="users"
key="users"
mode="read"
title="users"
>
<PermissionsWidgetItem
id="users-read-users-users"
key="0"
label="read"
selected="selected"
/>
<PermissionsWidgetItem
id="users-write-users-users"
key="1"
label="write"
selected="selected"
/>
</PermissionsWidgetSection>
<PermissionsWidgetSection
id="variables"
key="variables"
mode="read"
title="variables"
>
<PermissionsWidgetItem
id="variables-read-variables-variables"
key="0"
label="read"
selected="selected"
/>
<PermissionsWidgetItem
id="variables-write-variables-variables"
key="1"
label="write"
selected="selected"
/>
</PermissionsWidgetSection>
<PermissionsWidgetSection
id="scrapers"
key="scrapers"
mode="read"
title="scrapers"
>
<PermissionsWidgetItem
id="scrapers-read-scrapers-scrapers"
key="0"
label="read"
selected="selected"
/>
<PermissionsWidgetItem
id="scrapers-write-scrapers-scrapers"
key="1"
label="write"
selected="selected"
/>
</PermissionsWidgetSection>
<PermissionsWidgetSection
id="secrets"
key="secrets"
mode="read"
title="secrets"
>
<PermissionsWidgetItem
id="secrets-read-secrets-secrets"
key="0"
label="read"
selected="selected"
/>
<PermissionsWidgetItem
id="secrets-write-secrets-secrets"
key="1"
label="write"
selected="selected"
/>
</PermissionsWidgetSection>
<PermissionsWidgetSection
id="labels"
key="labels"
mode="read"
title="labels"
>
<PermissionsWidgetItem
id="labels-read-labels-labels"
key="0"
label="read"
selected="selected"
/>
<PermissionsWidgetItem
id="labels-write-labels-labels"
key="1"
label="write"
selected="selected"
/>
</PermissionsWidgetSection>
<PermissionsWidgetSection
id="views"
key="views"
mode="read"
title="views"
>
<PermissionsWidgetItem
id="views-read-views-views"
key="0"
label="read"
selected="selected"
/>
<PermissionsWidgetItem
id="views-write-views-views"
key="1"
label="write"
selected="selected"
/>
</PermissionsWidgetSection>
<PermissionsWidgetSection
id="documents"
key="documents"
mode="read"
title="documents"
>
<PermissionsWidgetItem
id="documents-read-documents-documents"
key="0"
label="read"
selected="selected"
/>
<PermissionsWidgetItem
id="documents-write-documents-documents"
key="1"
label="write"
selected="selected"
/>

View File

@ -0,0 +1,25 @@
import {Permission} from '@influxdata/influx'
import {get} from 'lodash'
export const permissions = (
permissions: Permission[]
): {[x: string]: Permission.ActionEnum[]} => {
const p = permissions.reduce((acc, {action, resource}) => {
const {type} = resource
const name = get(resource, 'name', '')
let key = `${type}`
if (name) {
key = `${type}-${name}`
}
let actions = get(acc, key, [])
if (name && actions) {
return {...acc, [key]: [...actions, action]}
}
actions = get(acc, key || resource.type, [])
return {...acc, [type]: [...actions, action]}
}, {})
return p
}