Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions Changelog.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,23 @@

## [Unreleased]

## [3.9.0] - 2026-06-29

### Added
- Implemetned new design for role permission
- Implemented tenant access list

## [3.8.0] - 2026-06-29

### Fixed
- Handled permission denied issue properly
- Rempved Quest from role
- Fixed issue of did update. It was giving sucess even if update failed

### Added
- Implemented remove authenticator
- Implemented categorized role

## [3.7.32] - 2026-06-20


Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "entity-developer-dashboard",
"version": "3.7.32",
"version": "3.9.0",
"private": true,
"scripts": {
"serve": "vue-cli-service serve --mode production",
Expand Down
6 changes: 5 additions & 1 deletion src/App.vue
Original file line number Diff line number Diff line change
Expand Up @@ -422,7 +422,7 @@ color: #1a1a2e !important;
</div>
</b-nav-item>

<b-nav-item v-if="!isMFAEnabled" to="/studio/settings" class="px-2">
<b-nav-item v-if="!isMFAEnabled" to="/studio/settings?ref=mfa" class="px-2">
<v-chip small color="orange" dark class="mfa-chip">
<b-icon icon="exclamation-triangle-fill" class="mr-1"></b-icon>
<span>Setup MFA</span>
Expand Down Expand Up @@ -615,6 +615,10 @@ export default {
EventBus.$on("logoutAll", () => {
this.logoutAll();
});

EventBus.$on("permissionDenied", (message) => {
this.notifyErr(message || "You don't have permission to perform this action.");
});
},
watch: {
// Re-mount the sidebar on every navigation so that only the active
Expand Down
1 change: 1 addition & 0 deletions src/assets/css/gblStyle.css
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,7 @@ a {
}



.badge-outline-success {
color: #4ec96b;
background-color: transparent;
Expand Down
49 changes: 35 additions & 14 deletions src/components/element/HfButtons.vue
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,9 @@
depressed
@click="emitExecuteAction()"
>
<span v-if="iconClass">
<i :class="iconClass" v-if="bIcon==false"></i>
<b-icon :icon="iconClass" :animation="animate" v-else></b-icon>
</span>
{{name}}
<v-icon v-if="isMdi" small left>{{ mdiIconName }}</v-icon>
<i v-else-if="iconClass" :class="iconClass" class="hf-fa-icon" aria-hidden="true"></i>
<span v-if="name" class="hf-btn-text">{{ name }}</span>
</v-btn>
</template>

Expand All @@ -26,7 +24,8 @@ export default {
default: ''},
name:{
type: String,
require:true
require:false,
default: ''
},
iconClass: {
type: String,
Expand All @@ -42,13 +41,22 @@ export default {
require:false
}
},
computed:{
// buttonThemeCss() {
// return {
// '--button-bg-color': config.app.buttonBgColor,
// '--button-text-color':config.app.buttonTextColor
// }
// },

computed: {
isMdi() {
return this.iconClass && (this.iconClass.startsWith('mdi') || this.iconClass.startsWith('mdi-'));
},
mdiIconName() {
if (!this.iconClass) return '';
const parts = this.iconClass.split(' ');
// prefer token that starts with 'mdi-'
const mdiDash = parts.find(p => p.startsWith('mdi-'));
if (mdiDash) return mdiDash;
// otherwise if 'mdi' exists, try to return next token that starts with 'mdi-'
const mdiIndex = parts.findIndex(p => p === 'mdi');
if (mdiIndex >= 0 && parts[mdiIndex + 1]) return parts[mdiIndex + 1];
return parts[0] || '';
}
},
methods:{
emitExecuteAction(){
Expand All @@ -58,7 +66,7 @@ export default {
};
</script>

<style >
<style>
/* .button-theme {
background-color: var(--button-bg-color);
border-collapse: var(--button-bg-color);
Expand All @@ -73,4 +81,17 @@ export default {
border: 1px solid #905ab0 !important;
color: #905ab0 !important;
} */

.hf-fa-icon {
font-family: "Font Awesome 5 Free", "Font Awesome 5 Brands" !important;
font-weight: 900 !important;
font-style: normal !important;
display: inline-block !important;
margin-right: 6px !important;
line-height: 1 !important;
}

.hf-btn-text {
margin-left: 2px;
}
</style>
20 changes: 5 additions & 15 deletions src/components/login/mfa/SetupMfa.vue
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@
import PIN from './PIN.vue'
import { mapActions } from 'vuex/dist/vuex.common.js';
import UtilsMixin from "../../../mixins/utils";
import { AUTHENTICATION_METHODS_LIST } from "../../../constants/authenticators";

export default {
name: 'SetupMfa',
Expand All @@ -79,18 +80,7 @@ export default {
isLoading: false,

qrCodeDataUrl: "",
authenticationMethodsList: [
{
name: 'Google Authenticator',
value: 'google',
selected: true,
},
{
name: 'Okta Authenticator',
value: 'okta',
selected: false
}
],
authenticationMethodsList: AUTHENTICATION_METHODS_LIST,
authenticationMethod: "",
error: ""
}
Expand Down Expand Up @@ -140,8 +130,8 @@ export default {
this.error = "Invalid code or expired, please try again"
} else {
this.notifySuccess(`Identity verified successfully`);
this.getMyUserDetails()
this.$emit("closePopup");
const user = await this.getMyUserDetails()
this.$emit("closePopup", user);
}
this.isLoading = false
} catch (e) {
Expand All @@ -165,4 +155,4 @@ export default {
ul {
list-style-type: none;
}
</style>
</style>
14 changes: 2 additions & 12 deletions src/components/login/mfa/VerifyMfa.vue
Original file line number Diff line number Diff line change
Expand Up @@ -69,24 +69,14 @@ import PIN from './PIN.vue'
import { mapMutations, mapActions } from 'vuex/dist/vuex.common.js';
import UtilsMixin from "../../../mixins/utils";
import EventBus from "../../../eventbus";
import { AUTHENTICATION_METHODS_LIST } from "../../../constants/authenticators";

export default {
name: 'VerifyMfa',
data() {
return {
isLoading: false,
authenticationMethodsList: [
{
name: 'Okta Authenticator',
value: 'okta',
selected: false
},
{
name: 'Google Authenticator',
value: 'google',
selected: false,
},
],
authenticationMethodsList: AUTHENTICATION_METHODS_LIST,
authenticationMethod: '',
error: "",
}
Expand Down
Loading
Loading