Client - display 'application:write' scope only if user is admin

This commit is contained in:
Sam 2022-06-19 20:32:38 +02:00
parent 63af0b70d9
commit 6911024f33
2 changed files with 26 additions and 5 deletions

View File

@ -49,7 +49,7 @@
{{ $t('oauth2.APP.SCOPE.LABEL') }}* {{ $t('oauth2.APP.SCOPE.LABEL') }}*
</div> </div>
<div <div
v-for="scope in oauth2_scopes" v-for="scope in filtered_scopes"
class="form-item-scope-checkboxes" class="form-item-scope-checkboxes"
:key="scope" :key="scope"
> >
@ -86,12 +86,18 @@
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import { reactive } from 'vue' import { computed, reactive } from 'vue'
import { OAUTH2_STORE } from '@/store/constants' import { OAUTH2_STORE } from '@/store/constants'
import { IOAuth2ClientPayload } from '@/types/oauth' import { IOAuth2ClientPayload } from '@/types/oauth'
import { IAuthUserProfile } from '@/types/user'
import { useStore } from '@/use/useStore' import { useStore } from '@/use/useStore'
import { oauth2_scopes } from '@/utils/oauth' import { admin_oauth2_scopes, oauth2_scopes } from '@/utils/oauth'
interface Props {
authUser: IAuthUserProfile
}
const props = defineProps<Props>()
const store = useStore() const store = useStore()
const appForm = reactive({ const appForm = reactive({
@ -101,6 +107,9 @@
redirect_uri: '', redirect_uri: '',
}) })
const scopes: string[] = reactive([]) const scopes: string[] = reactive([])
const filtered_scopes = computed(() =>
getScopes(props.authUser, admin_oauth2_scopes, oauth2_scopes)
)
function createApp() { function createApp() {
const payload: IOAuth2ClientPayload = { const payload: IOAuth2ClientPayload = {
@ -108,7 +117,7 @@
client_description: appForm.client_description, client_description: appForm.client_description,
client_uri: appForm.client_uri, client_uri: appForm.client_uri,
redirect_uris: [appForm.redirect_uri], redirect_uris: [appForm.redirect_uri],
scope: scopes.join(' '), scope: scopes.sort().join(' '),
} }
store.dispatch(OAUTH2_STORE.ACTIONS.CREATE_CLIENT, payload) store.dispatch(OAUTH2_STORE.ACTIONS.CREATE_CLIENT, payload)
} }
@ -123,6 +132,17 @@
scopes.push(scope) scopes.push(scope)
} }
} }
function getScopes(
authUser: IAuthUserProfile,
admin_scopes: string[],
scopes: string[]
) {
const filtered_scopes = [...scopes]
if (authUser.admin) {
filtered_scopes.push(...admin_scopes)
}
return filtered_scopes.sort()
}
</script> </script>
<style scoped lang="scss"> <style scoped lang="scss">

View File

@ -1,5 +1,4 @@
export const oauth2_scopes = [ export const oauth2_scopes = [
'application:write',
'profile:read', 'profile:read',
'profile:write', 'profile:write',
'users:read', 'users:read',
@ -7,3 +6,5 @@ export const oauth2_scopes = [
'workouts:read', 'workouts:read',
'workouts:write', 'workouts:write',
] ]
export const admin_oauth2_scopes = ['application:write']