permisisions
deploy to danak / build_and_deploy (push) Has been cancelled

This commit is contained in:
hamid zarghami
2026-07-26 08:59:39 +03:30
parent 185961c162
commit 1990e73368
5 changed files with 36 additions and 11 deletions
+24 -1
View File
@@ -95,6 +95,21 @@ export enum PermissionEnum {
BLOGS_UPDATE = "blogs_update",
BLOGS_DELETE = "blogs_delete",
BLOG_CATEGORIES_CREATE = "blog_categories_create",
BLOG_CATEGORIES_READ = "blog_categories_read",
BLOG_CATEGORIES_UPDATE = "blog_categories_update",
BLOG_CATEGORIES_DELETE = "blog_categories_delete",
BLOG_COMMENTS_CREATE = "blog_comments_create",
BLOG_COMMENTS_READ = "blog_comments_read",
BLOG_COMMENTS_UPDATE = "blog_comments_update",
BLOG_COMMENTS_DELETE = "blog_comments_delete",
SLIDERS_CREATE = "sliders_create",
SLIDERS_READ = "sliders_read",
SLIDERS_UPDATE = "sliders_update",
SLIDERS_DELETE = "sliders_delete",
LEARNINGS_CREATE = "learnings_create",
LEARNINGS_READ = "learnings_read",
LEARNINGS_UPDATE = "learnings_update",
@@ -170,7 +185,15 @@ export type CrudAction = "create" | "read" | "update" | "delete";
const CRUD_ACTIONS: readonly CrudAction[] = ["create", "read", "update", "delete"];
export const CONTENT_PERMISSION_RESOURCES = ["blogs", "learnings", "advertisements", "announcements"] as const;
export const CONTENT_PERMISSION_RESOURCES = [
"blogs",
"blog_categories",
"blog_comments",
"sliders",
"learnings",
"advertisements",
"announcements",
] as const;
export const FINANCIAL_PERMISSION_RESOURCES = ["payments", "invoices", "transactions", "discounts", "bank_accounts"] as const;
export const SUPPORT_PERMISSION_RESOURCES = [
"support_plan",
+3 -3
View File
@@ -104,10 +104,10 @@ const BlogCategory: FC = () => {
<Td text={moment(item.createdAt).format('jYYYY/jMM/jDD')} />
<Td text={t('')}>
<div className='flex gap-2 items-center'>
{canUpdate('blogs') && (
{canUpdate('blog_categories') && (
<UpdateCategory id={item.id} />
)}
{canDelete('blogs') && (
{canDelete('blog_categories') && (
<Trash size={20} color='red' onClick={() => {
deleteBlogCategory.mutateAsync(item.id, {
onSuccess: () => {
@@ -129,7 +129,7 @@ const BlogCategory: FC = () => {
</div>
</div>
</div>
{canCreate('blogs') && (
{canCreate('blog_categories') && (
<div className='relative bg-white min-h-[calc(100vh-185px)] w-sidebar xl:block hidden py-10 px-5 h-fit rounded-3xl'>
<p className='text-md'>{t('blog.add_category')}</p>
<div className='text-sm flex items-center justify-between mt-4'>
+3 -1
View File
@@ -7,8 +7,10 @@ import moment from 'moment-jalaali'
import { CloseCircle, TickCircle } from 'iconsax-react'
import { ErrorType } from '../../helpers/types'
import { toast } from '../../components/Toast';
import { usePermissions } from '../../hooks/usePermissions'
const Comments: FC = () => {
const { t } = useTranslation('global')
const { canUpdate } = usePermissions()
const getBlogComments = useGetBlogComments()
const changeStatusComment = useChangeStatusComment()
const handleChangeStatus = (id: string, status: string) => {
@@ -49,7 +51,7 @@ const Comments: FC = () => {
<Td text={moment(item.createdAt).format('jYYYY/jMM/jDD')} />
<Td text=''>
{
item.status === 'PENDING' &&
item.status === 'PENDING' && canUpdate('blog_comments') &&
<div className='flex items-center gap-2'>
<TickCircle onClick={() => handleChangeStatus(item.id, 'APPROVED')} color='green' size={20} />
<CloseCircle onClick={() => handleChangeStatus(item.id, 'REJECTED')} color='red' size={20} />
+3 -3
View File
@@ -37,7 +37,7 @@ const SliderList: FC = () => {
<div>
{t('slider.list_slider')}
</div>
{canCreate('blogs') && (
{canCreate('sliders') && (
<div>
<Link to={Pages.sliders.create}>
<Button
@@ -84,7 +84,7 @@ const SliderList: FC = () => {
<Td text={item.isActive ? t('slider.active') : t('slider.inactive')} />
<Td text={''}>
<div className='flex gap-2'>
{canUpdate('blogs') && (
{canUpdate('sliders') && (
<Link to={Pages.sliders.detail + item.id}>
<Edit
className='size-5'
@@ -92,7 +92,7 @@ const SliderList: FC = () => {
/>
</Link>
)}
{canDelete('blogs') && (
{canDelete('sliders') && (
<TrashWithConfrim
onDelete={() => handleDelete(item.id)}
isLoading={deleteSlider.isPending}
+3 -3
View File
@@ -39,13 +39,13 @@ const ContentSubMenu: FC = () => {
title={t("submenu.blog_comments")}
isActive={isActive("/blog/comments")}
link={Pages.blog.comments}
activeName="blogs"
activeName="blog_comments"
/>
<SubMenuItem
title={t("submenu.blog_category")}
isActive={isActive("/blog/category")}
link={Pages.blog.category}
activeName="blogs"
activeName="blog_categories"
/>
<SubMenuItem
title={t("sidebar.ads")}
@@ -69,7 +69,7 @@ const ContentSubMenu: FC = () => {
title={t("sidebar.sliders")}
isActive={isActive("sliders")}
link={Pages.sliders.list}
activeName="blogs"
activeName="sliders"
/>
</div>
</div>