refactor: structure policy

UI.notification-modules-changes
Saeid 4 years ago
parent 2467a49792
commit 6f0e98d649

@ -43,7 +43,7 @@
<v-list class="pt-0" dense> <v-list class="pt-0" dense>
<v-divider class="Divider"/> <v-divider class="Divider"/>
<a :href="item.href" v-for="(item, key) in Items" :key="key"> <a :href="item.href" v-for="(item, key) in Items" :key="key">
<template v-if="(!item.permissionClass || $_can(item.permissionClass, false, item.module)) && (!item.moduleName || getModules.find(x => x.slug === item.moduleName))"> <template v-if="(!item.permissionClass || $_can(item.permissionClass, false, item.module)) && ($_hasModule(item.moduleName, true))">
<wm-list-tile :TitleFa="item.titleFa" :TitleEn="item.titleEn" :icon="item.icon" :tileClass="item.tileClass"/> <wm-list-tile :TitleFa="item.titleFa" :TitleEn="item.titleEn" :icon="item.icon" :tileClass="item.tileClass"/>
</template> </template>
</a> </a>
@ -80,8 +80,6 @@ export default {
titleEn: " Product Management ", titleEn: " Product Management ",
titleFa: " مدیریت محصولات ", titleFa: " مدیریت محصولات ",
icon: "dropbox", icon: "dropbox",
permissionClass: "Product::index",
module: "core",
href: '/product/home', href: '/product/home',
tileClass: 'cyan-theme', tileClass: 'cyan-theme',
}, },

@ -1,5 +1,5 @@
import { mapActions } from "vuex"; import { mapActions } from "vuex";
import $_can from "@Global/policy/can"; import $_can, {$_hasModule} from "@Global/policy/can";
import $_name from "@Global/utils/category-name/name"; import $_name from "@Global/utils/category-name/name";
import $_color from "@Global/utils/module-color"; import $_color from "@Global/utils/module-color";
const global = { const global = {
@ -25,6 +25,7 @@ const global = {
"$_closeModal" "$_closeModal"
]), ]),
$_openModal(name, data = {}) { $_openModal(name, data = {}) {
if (typeof name == 'object') { if (typeof name == 'object') {
this.__openModal(name) this.__openModal(name)
@ -33,9 +34,9 @@ const global = {
} }
}, },
$_can, $_can,
$_hasModule,
$_name, $_name,
$_color, $_color,
} }
}; };

@ -1,15 +1,15 @@
import policyClasses from '@Global/policy';
import { UserService } from "@Global/services/storage.services"; import { UserService } from "@Global/services/storage.services";
import globalStore from "@Global/store"; import globalStore from "@Global/store";
import authStore from "@Core/store"; import authStore from "@Core/store";
import Routes from "@Global/utils/common/routes" import Routes from "@Global/utils/common/routes"
import Vue from "vue";
export default (model, object, module = null) => { export default (model, object, module = null) => {
//Access To All Place For Site Manager //Access To All Place For Site Manager
let siteOwner = UserService.get().is_owner == "true"; // let siteOwner = UserService.get().is_owner == "true";
if (siteOwner || window.location.hostname === Routes.originHostName()) { // if (siteOwner || window.location.hostname === Routes.originHostName()) {
return true; // return true;
} // }
let policyClass = model.split('::')[0] + 'Policy'; let policyClass = model.split('::')[0] + 'Policy';
let policymethod = model.split('::')[1]; let policymethod = model.split('::')[1];
@ -18,10 +18,17 @@ export default (model, object, module = null) => {
let permissions = rootPermissions[module] ? Object.values(rootPermissions[module]) : [] ; let permissions = rootPermissions[module] ? Object.values(rootPermissions[module]) : [] ;
//instance policty class //instance policty class
let policy = new policyClasses[policyClass]; let policy = new Vue.prototype.$policiesClasses[policyClass];
if (typeof policy == 'object' && typeof policy[policymethod] == 'function' ) { if (typeof policy == 'object' && typeof policy[policymethod] == 'function' ) {
return policy[policymethod]({module, rootPermissions, permissions}, object); return policy[policymethod]({module, rootPermissions, permissions}, object);
} else { } else {
return false; return false;
} }
}; };
export const $_hasModule = (moduleName, defaultParam) => {
if (defaultParam && typeof moduleName === 'undefined') {
return true;
}
return authStore.getters['rolePermission/getModules'].find(x => x.slug === moduleName)
};

@ -1,17 +0,0 @@
import CRMPolicy from '@CRM/policy';
import BlogPolicy from '@Blog/policy';
import PortfolioPolicy from '@Portfolio/policy';
import ProductPolicy from '@Product/policy';
import ServicePolicy from '@Service/policy';
import CorePolicy from '@Core/policy';
import CommonPolicy from '@Common/policy';
export default {
...PortfolioPolicy,
...BlogPolicy,
...CRMPolicy,
...ProductPolicy,
...ServicePolicy,
...CorePolicy,
...CommonPolicy,
}

@ -9,7 +9,7 @@ export default {
} }
if (can) { if (can) {
data.name = 'modal_' + data.name; data.name = 'modal_' + data.name;
if (state.modals.findIndex(x => x.name == data.name) == -1) { if (state.modals.findIndex(x => x.name === data.name) === -1) {
state.modals.push(data); state.modals.push(data);
let module = data.name.split("_"); let module = data.name.split("_");
if (data.rel) { if (data.rel) {

@ -0,0 +1,9 @@
import Vue from "vue";
import {CorePolicies} from "@Core/policy";
import CommonPolicy from "@Common/policy";
Vue.prototype.$policiesClasses = {
...CorePolicies,
...CommonPolicy
};
Loading…
Cancel
Save