Skip to content

Commit

Permalink
acl changes
Browse files Browse the repository at this point in the history
  • Loading branch information
volar committed Jun 24, 2024
1 parent 652bc5e commit cb885cc
Show file tree
Hide file tree
Showing 70 changed files with 308 additions and 299 deletions.
7 changes: 4 additions & 3 deletions src/components/system/CurrentUserDropdown.vue
Original file line number Diff line number Diff line change
@@ -1,14 +1,15 @@
<script lang="ts" setup>
import { ROUTE } from '@/router/routes'
import { useDamCurrentUser } from '@anzusystems/common-admin'
import { ACurrentUserDropdown } from '@anzusystems/common-admin'
import { useAuth } from '@/composables/auth/auth'
const { damCurrentUser } = useDamCurrentUser()
const { useCurrentUser } = useAuth()
const { currentUser } = useCurrentUser('dam')
</script>

<template>
<ACurrentUserDropdown
:current-user="damCurrentUser as any"
:current-user="currentUser as any"
:settings-route-name="ROUTE.SYSTEM.SETTINGS"
:logout-route-name="ROUTE.SYSTEM.LOGOUT"
/>
Expand Down
3 changes: 2 additions & 1 deletion src/components/system/sidebar/SidebarMain.vue
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
<script lang="ts" setup>
import { ROUTE } from '@/router/routes'
import { useI18n } from 'vue-i18n'
import { ACL } from '@/types/Permission'
import { ACL } from '@/composables/auth/auth'
const { t } = useI18n()
</script>
Expand Down
3 changes: 2 additions & 1 deletion src/components/system/sidebar/SidebarRail.vue
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
<script lang="ts" setup>
import { ROUTE } from '@/router/routes'
import { useI18n } from 'vue-i18n'
import { ACL } from '@/types/Permission'
import { ACL } from '@/composables/auth/auth'
const { t } = useI18n()
</script>
Expand Down
2 changes: 1 addition & 1 deletion src/components/wrappers/MainWrapper.vue
Original file line number Diff line number Diff line change
Expand Up @@ -10,9 +10,9 @@ import logoFull from '@/assets/logo-adam-full.svg'
import logoNoText from '@/assets/logo-adam-no-text.svg'
import { ROUTE } from '@/router/routes'
import AssetToolbarIntegrations from '@/views/coreDam/asset/components/toolbar/AssetToolbarIntegrations.vue'
import { ACL } from '@/types/Permission'
import { AAdminSwitcher, ASystemBar } from '@anzusystems/common-admin'
import { envConfig } from '@/services/EnvConfigService'
import { ACL } from '@/composables/auth/auth'
const { t } = useI18n()
Expand Down
115 changes: 115 additions & 0 deletions src/composables/auth/auth.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,115 @@
import { defineAuth } from '@anzusystems/common-admin'

export const ACL = {
DAM_ASSET_CREATE: 'dam_asset_create',
DAM_ASSET_UPDATE: 'dam_asset_update',
DAM_ASSET_READ: 'dam_asset_read',
DAM_ASSET_DELETE: 'dam_asset_delete',
DAM_VIDEO_CREATE: 'dam_video_create',
DAM_VIDEO_UPDATE: 'dam_video_update',
DAM_VIDEO_READ: 'dam_video_read',
DAM_VIDEO_DELETE: 'dam_video_delete',
DAM_AUDIO_CREATE: 'dam_audio_create',
DAM_AUDIO_UPDATE: 'dam_audio_update',
DAM_AUDIO_READ: 'dam_audio_read',
DAM_AUDIO_DELETE: 'dam_audio_delete',
DAM_CUSTOM_FORM_CREATE: 'dam_customForm_create',
DAM_CUSTOM_FORM_UPDATE: 'dam_customForm_update',
DAM_CUSTOM_FORM_READ: 'dam_customForm_read',
DAM_CUSTOM_FORM_ELEMENT_READ: 'dam_customFormElement_read',
DAM_DOCUMENT_CREATE: 'dam_document_create',
DAM_DOCUMENT_UPDATE: 'dam_document_update',
DAM_DOCUMENT_READ: 'dam_document_read',
DAM_DOCUMENT_DELETE: 'dam_document_delete',
DAM_IMAGE_CREATE: 'dam_image_create',
DAM_IMAGE_UPDATE: 'dam_image_update',
DAM_IMAGE_READ: 'dam_image_read',
DAM_IMAGE_DELETE: 'dam_image_delete',
DAM_REGION_OF_INTEREST_CREATE: 'dam_regionOfInterest_create',
DAM_REGION_OF_INTEREST_UPDATE: 'dam_regionOfInterest_update',
DAM_REGION_OF_INTEREST_READ: 'dam_regionOfInterest_read',
DAM_REGION_OF_INTEREST_DELETE: 'dam_regionOfInterest_delete',
DAM_EXT_SYSTEM_UPDATE: 'dam_extSystem_update',
DAM_EXT_SYSTEM_READ: 'dam_extSystem_read',
DAM_EXT_SYSTEM_LIST: 'dam_extSystem_list',
DAM_ASSET_LICENCE_CREATE: 'dam_assetLicence_create',
DAM_ASSET_LICENCE_UPDATE: 'dam_assetLicence_update',
DAM_ASSET_LICENCE_READ: 'dam_assetLicence_read',
DAM_ASSET_LICENCE_LIST: 'dam_assetLicence_list',
DAM_ASSET_LICENCE_GROUP_CREATE: 'dam_assetLicenceGroup_create',
DAM_ASSET_LICENCE_GROUP_UPDATE: 'dam_assetLicenceGroup_update',
DAM_ASSET_LICENCE_GROUP_READ: 'dam_assetLicenceGroup_read',
DAM_ASSET_LICENCE_GROUP_LIST: 'dam_assetLicenceGroup_list',
DAM_USER_READ: 'dam_user_read',
DAM_USER_CREATE: 'dam_user_create',
DAM_USER_UPDATE: 'dam_user_update',
DAM_USER_UGC_IMPERSONATE: 'dam_user_ugcImpersonate',
DAM_PERMISSION_GROUP_READ: 'dam_permissionGroup_read',
DAM_PERMISSION_GROUP_CREATE: 'dam_permissionGroup_create',
DAM_PERMISSION_GROUP_UPDATE: 'dam_permissionGroup_update',
DAM_PERMISSION_GROUP_DELETE: 'dam_permissionGroup_delete',
DAM_AUTHOR_READ: 'dam_author_read',
DAM_AUTHOR_CREATE: 'dam_author_create',
DAM_AUTHOR_UPDATE: 'dam_author_update',
DAM_AUTHOR_DELETE: 'dam_author_delete',
DAM_KEYWORD_READ: 'dam_keyword_read',
DAM_KEYWORD_CREATE: 'dam_keyword_create',
DAM_KEYWORD_UPDATE: 'dam_keyword_update',
DAM_KEYWORD_DELETE: 'dam_keyword_delete',
DAM_JOB_CREATE: 'dam_job_create',
DAM_JOB_READ: 'dam_job_read',
DAM_JOB_DELETE: 'dam_job_delete',
DAM_DISTRIBUTION_CATEGORY_READ: 'dam_distributionCategory_read',
DAM_DISTRIBUTION_CATEGORY_CREATE: 'dam_distributionCategory_create',
DAM_DISTRIBUTION_CATEGORY_UPDATE: 'dam_distributionCategory_update',
DAM_DISTRIBUTION_CATEGORY_DELETE: 'dam_distributionCategory_delete',
DAM_DISTRIBUTION_CATEGORY_SELECT_READ: 'dam_distributionCategorySelect_read',
DAM_DISTRIBUTION_CATEGORY_SELECT_UPDATE: 'dam_distributionCategorySelect_update',
DAM_VIDEO_SHOW_CREATE: 'dam_videoShow_create',
DAM_VIDEO_SHOW_UPDATE: 'dam_videoShow_update',
DAM_VIDEO_SHOW_READ: 'dam_videoShow_read',
DAM_VIDEO_SHOW_DELETE: 'dam_videoShow_delete',
DAM_VIDEO_SHOW_EPISODE_CREATE: 'dam_videoShowEpisode_create',
DAM_VIDEO_SHOW_EPISODE_UPDATE: 'dam_videoShowEpisode_update',
DAM_VIDEO_SHOW_EPISODE_READ: 'dam_videoShowEpisode_read',
DAM_VIDEO_SHOW_EPISODE_DELETE: 'dam_videoShowEpisode_delete',
DAM_PODCAST_CREATE: 'dam_podcast_create',
DAM_PODCAST_UPDATE: 'dam_podcast_update',
DAM_PODCAST_READ: 'dam_podcast_read',
DAM_PODCAST_DELETE: 'dam_podcast_delete',
DAM_PODCAST_EPISODE_CREATE: 'dam_podcastEpisode_create',
DAM_PODCAST_EPISODE_UPDATE: 'dam_podcastEpisode_update',
DAM_PODCAST_EPISODE_READ: 'dam_podcastEpisode_read',
DAM_PODCAST_EPISODE_DELETE: 'dam_podcastEpisode_delete',
DAM_ASSET_EXTERNAL_PROVIDER_ACCESS: 'dam_assetExternalProvider_access',
DAM_DISTRIBUTION_ACCESS: 'dam_distribution_access',
DAM_USER_UI: 'dam_user_ui',
DAM_PERMISSION_GROUP_UI: 'dam_permissionGroup_ui',
DAM_EXT_SYSTEM_UI: 'dam_extSystem_ui',
DAM_ASSET_LICENCE_UI: 'dam_assetLicence_ui',
DAM_ASSET_LICENCE_GROUP_UI: 'dam_assetLicenceGroup_ui',
DAM_AUTHOR_UI: 'dam_author_ui',
DAM_KEYWORD_UI: 'dam_keyword_ui',
DAM_DISTRIBUTION_CATEGORY_UI: 'dam_distributionCategory_ui',
DAM_DISTRIBUTION_CATEGORY_SELECT_UI: 'dam_distributionCategorySelect_ui',
DAM_VIDEO_SHOW_UI: 'dam_videoShow_ui',
DAM_VIDEO_SHOW_EPISODE_UI: 'dam_videoShowEpisode_ui',
DAM_PODCAST_UI: 'dam_podcast_ui',
DAM_PODCAST_EPISODE_UI: 'dam_podcastEpisode_ui',
DAM_LOG_UI: 'dam_log_ui',
DAM_JOB_UI: 'dam_job_ui',
} as const
export type AclKey = keyof typeof ACL
export type AclValue = (typeof ACL)[AclKey]

export function useAuth() {
const { can, canForAll, canForSome, useCurrentUser } = defineAuth<AclValue>('dam')

return {
useCurrentUser,
can,
canForAll,
canForSome,
}
}

14 changes: 5 additions & 9 deletions src/composables/system/appInitialize.ts
Original file line number Diff line number Diff line change
@@ -1,20 +1,15 @@
import { useCookies } from '@vueuse/integrations/useCookies'
import { ref } from 'vue'
import type { NavigationGuardNext, RouteLocationNormalized } from 'vue-router'
import {
isDefined,
isUndefined,
updateDamCurrentUser,
useDamConfigState,
useDamCurrentUser,
} from '@anzusystems/common-admin'
import { isDefined, isUndefined, updateDamCurrentUser, useDamConfigState } from '@anzusystems/common-admin'
import { ROUTE } from '@/router/routes'
import { checkAbility } from '@/router/checkAbility'
import { envConfig } from '@/services/EnvConfigService'
import { initCurrentExtSystemAndLicence, useCurrentExtSystem } from '@/composables/system/currentExtSystem'
import { initAppNotificationListeners } from '@/composables/system/appNotificationListeners'
import { useLoginStatus } from '@/composables/system/loginStatus'
import { damClient } from '@/services/api/clients/damClient'
import { useAuth } from '@/composables/auth/auth'

const initialized = ref(false)

Expand Down Expand Up @@ -55,11 +50,12 @@ export async function createAppInitialize(
return
}

const { damCurrentUser } = useDamCurrentUser()
const { useCurrentUser } = useAuth()
const { currentUser } = useCurrentUser('dam')

if (
(isStatusNotDefined() || isStatusSsoCommunicationFailure() || isStatusInternalErrorFailure()) &&
isUndefined(damCurrentUser.value)
isUndefined(currentUser.value)
) {
next({ name: ROUTE.SYSTEM.LOGIN })
} else if (isStatusUnauthorized()) {
Expand Down
23 changes: 12 additions & 11 deletions src/composables/system/currentExtSystem.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import { readonly, ref, watch } from 'vue'
import type { DamExtSystem } from '@anzusystems/common-admin'
import { isDocId, isString, useDamConfigState, useDamCurrentUser } from '@anzusystems/common-admin'
import type { DamAssetLicence, DamCurrentUserDto, DamExtSystem } from '@anzusystems/common-admin'
import { isDocId, isString, useDamConfigState } from '@anzusystems/common-admin'
import { fetchExtSystem } from '@/services/api/coreDam/extSystemApi'
import { fetchAssetLicence } from '@/services/api/coreDam/assetLicenceApi'
import type { DamAssetLicence } from '@anzusystems/common-admin'
import { fetchAsset } from '@/services/api/coreDam/assetApi'
import { useAssetDetailStore } from '@/stores/coreDam/assetDetailStore'
import { damClient } from '@/services/api/clients/damClient'
import { useAuth } from '@/composables/auth/auth'

const currentExtSystemId = ref(0)
const currentExtSystem = ref<DamExtSystem>()
Expand All @@ -15,7 +15,8 @@ const currentAssetLicence = ref<DamAssetLicence>()
const currentAssetLicenceId = ref(0)

export const initCurrentExtSystemAndLicence = (loadFromAsset = false, assetId: string | undefined = undefined) => {
const { damCurrentUser } = useDamCurrentUser()
const { useCurrentUser } = useAuth()
const { currentUser } = useCurrentUser<DamCurrentUserDto>('dam')
const { damPrvConfig, initialized } = useDamConfigState(damClient)

watch(currentExtSystemId, async (newValue, oldValue) => {
Expand All @@ -38,7 +39,7 @@ export const initCurrentExtSystemAndLicence = (loadFromAsset = false, assetId: s
reject(false)
return
}
if (!damCurrentUser.value) {
if (!currentUser.value) {
console.error('Current user must be loaded first.')
reject(false)
return
Expand Down Expand Up @@ -73,14 +74,14 @@ export const initCurrentExtSystemAndLicence = (loadFromAsset = false, assetId: s
})
}
if (damPrvConfig.value.settings.allowSelectExtSystem && damPrvConfig.value.settings.allowSelectLicenceId) {
if (damCurrentUser.value.selectedLicence) {
currentExtSystemId.value = damCurrentUser.value.selectedLicence.extSystem
currentAssetLicenceId.value = damCurrentUser.value.selectedLicence.id
if (currentUser.value.selectedLicence) {
currentExtSystemId.value = currentUser.value.selectedLicence.extSystem
currentAssetLicenceId.value = currentUser.value.selectedLicence.id
resolve(true)
return
} else if (damCurrentUser.value.assetLicences[0]) {
currentExtSystemId.value = damCurrentUser.value.assetLicences[0].extSystem
currentAssetLicenceId.value = damCurrentUser.value.assetLicences[0].id
} else if (currentUser.value.assetLicences[0]) {
currentExtSystemId.value = currentUser.value.assetLicences[0].extSystem
currentAssetLicenceId.value = currentUser.value.assetLicences[0].id
resolve(true)
return
}
Expand Down
8 changes: 4 additions & 4 deletions src/main.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,19 +17,19 @@ import {
loadCommonFonts,
type PluginOptions,
} from '@anzusystems/common-admin'
import { useDamCurrentUser } from '@anzusystems/common-admin'
import type { AclValue } from '@/types/Permission'
import '@anzusystems/common-admin/styles'
import { damClient } from '@/services/api/clients/damClient'
import dayjs from 'dayjs'
import Duration from 'dayjs/plugin/duration'
import { type AclValue, useAuth } from '@/composables/auth/auth'

export const DEFAULT_LANGUAGE: LanguageCode = 'sk'
export const AVAILABLE_LANGUAGES: Array<LanguageCode> = ['en', 'sk']

dayjs.extend(Duration)

const { damCurrentUser } = useDamCurrentUser()
const { useCurrentUser } = useAuth()
const { currentUser } = useCurrentUser('dam')

loadCommonFonts()

Expand All @@ -40,7 +40,7 @@ loadEnvConfig(() => {
.use(vuetify)
.use(router)
.use<PluginOptions<AclValue>>(AnzuSystemsCommonAdmin, {
currentUser: damCurrentUser,
currentUser: currentUser,
languages: {
available: AVAILABLE_LANGUAGES,
default: DEFAULT_LANGUAGE,
Expand Down
3 changes: 2 additions & 1 deletion src/plugins.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@
import type { MessageSchema } from '@/plugins/i18n'
import type { ObjectLeaves } from '@anzusystems/common-admin'
import 'vue-router'
import type { AclValue as CustomAclValue } from '@/types/Permission'

import type { AclValue as CustomAclValue } from '@/composables/auth/auth'

declare module 'vue-router' {
interface RouteMeta {
Expand Down
7 changes: 3 additions & 4 deletions src/router/checkAbility.ts
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
import type { NavigationGuardNext, RouteLocationNormalized } from 'vue-router'
import { isUndefined, useAcl, useDamCurrentUser } from '@anzusystems/common-admin'
import type { AclValue } from '@/types/Permission'
import { isUndefined } from '@anzusystems/common-admin'
import { useAuth } from '@/composables/auth/auth'

export const checkAbility = async (
to: RouteLocationNormalized,
from: RouteLocationNormalized,
next: NavigationGuardNext
) => {
const { damCurrentUser } = useDamCurrentUser()
const { canForAll } = useAcl<AclValue>({ currentUser: damCurrentUser, disableInject: true })
const { canForAll } = useAuth()

if (isUndefined(to.meta.requiredPermissions)) {
next()
Expand Down
8 changes: 4 additions & 4 deletions src/router/routes/common/anzuUser.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import { ROUTE } from '@/router/routes'
import { ACL } from '@/types/Permission'
import type { RouteRecordRaw } from 'vue-router'
import { AEmptyRouterView } from '@anzusystems/common-admin'
import { ACL } from '@/composables/auth/auth'

export const anzuUserRoutes: RouteRecordRaw[] = [
{
Expand All @@ -20,7 +20,7 @@ export const anzuUserRoutes: RouteRecordRaw[] = [
component: () => import('@/views/common/anzuUser/AnzuUserListView.vue'),
meta: {
requiresAuth: true,
requiredPermissions: [ACL.DAM_USER_VIEW],
requiredPermissions: [ACL.DAM_USER_READ],
layout: 'AppLayoutDrawer',
},
},
Expand All @@ -30,7 +30,7 @@ export const anzuUserRoutes: RouteRecordRaw[] = [
component: () => import('@/views/common/anzuUser/AnzuUserEditView.vue'),
meta: {
requiresAuth: true,
requiredPermissions: [ACL.DAM_USER_VIEW, ACL.DAM_USER_UPDATE],
requiredPermissions: [ACL.DAM_USER_READ, ACL.DAM_USER_UPDATE],
layout: 'AppLayoutDrawer',
breadcrumbT: 'breadcrumb.anzuUser.edit',
},
Expand All @@ -41,7 +41,7 @@ export const anzuUserRoutes: RouteRecordRaw[] = [
component: () => import('@/views/common/anzuUser/AnzuUserDetailView.vue'),
meta: {
requiresAuth: true,
requiredPermissions: [ACL.DAM_USER_VIEW],
requiredPermissions: [ACL.DAM_USER_READ],
layout: 'AppLayoutDrawer',
breadcrumbT: 'breadcrumb.anzuUser.detail',
},
Expand Down
2 changes: 1 addition & 1 deletion src/router/routes/common/log.ts
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
import ListView from '@/views/common/log/LogListView.vue'
import DetailView from '@/views/common/log/LogDetailView.vue'
import { ROUTE } from '@/router/routes'
import { ACL } from '@/types/Permission'
import { AEmptyRouterView } from '@anzusystems/common-admin'
import { ACL } from '@/composables/auth/auth'

export const commonLogRoutes = [
{
Expand Down
Loading

0 comments on commit cb885cc

Please sign in to comment.