Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: Add permissions for admin staff #547

Draft
wants to merge 5 commits into
base: canary
Choose a base branch
from
Draft
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
8 changes: 4 additions & 4 deletions .github/workflows/publish.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ jobs:
run: pnpm run build:scripts

- name: Build Projects
run: pnpm run build --filter=vitnode-backend --filter=vitnode-frontend --filter=vitnode-backend-email-resend --filter=vitnode-backend-email-smtp
run: pnpm run build --filter=vitnode-backend --filter=vitnode-frontend --filter=vitnode-backend-email-resend --filter=vitnode-backend-email-smtp --filter=vitnode-backend-ai-google --filter=vitnode-backend-ai-open-ai

- name: Run script to bump version
run: pnpm run release
Expand All @@ -74,21 +74,21 @@ jobs:

- name: Publish canary
if: github.event.inputs.release == 'canary'
run: pnpm publish --access public --filter vitnode-backend --filter vitnode-backend-email-resend --filter vitnode-backend-email-smtp --filter vitnode-frontend --filter create-vitnode-app --filter eslint-config-typescript-vitnode --tag canary --no-git-checks
run: pnpm publish --access public --filter vitnode-backend --filter vitnode-backend-email-resend --filter vitnode-backend-email-smtp --filter vitnode-backend-ai-google --filter vitnode-backend-ai-open-ai --filter vitnode-frontend --filter create-vitnode-app --filter eslint-config-typescript-vitnode --tag canary --no-git-checks
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
NPM_CONFIG_PROVENANCE: true

- name: Publish release candidate
if: github.event.inputs.release == 'release-candidate'
run: pnpm publish --access public --filter vitnode-backend --filter vitnode-backend-email-resend --filter vitnode-backend-email-smtp --filter vitnode-frontend --filter create-vitnode-app --filter eslint-config-typescript-vitnode --tag rc --no-git-checks
run: pnpm publish --access public --filter vitnode-backend --filter vitnode-backend-email-resend --filter vitnode-backend-email-smtp --filter vitnode-backend-ai-google --filter vitnode-backend-ai-open-ai --filter vitnode-frontend --filter create-vitnode-app --filter eslint-config-typescript-vitnode --tag rc --no-git-checks
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
NPM_CONFIG_PROVENANCE: true

- name: Publish stable
if: github.event.inputs.release == 'stable'
run: pnpm publish --access public --filter vitnode-backend --filter vitnode-backend-email-resend --filter vitnode-backend-email-smtp --filter vitnode-frontend --filter create-vitnode-app --filter eslint-config-typescript-vitnode --no-git-checks
run: pnpm publish --access public --filter vitnode-backend --filter vitnode-backend-email-resend --filter vitnode-backend-email-smtp --filter vitnode-backend-ai-google --filter vitnode-backend-ai-open-ai --filter vitnode-frontend --filter create-vitnode-app --filter eslint-config-typescript-vitnode --no-git-checks
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
NPM_CONFIG_PROVENANCE: true
12 changes: 12 additions & 0 deletions apps/backend/schema.gql
Original file line number Diff line number Diff line change
Expand Up @@ -244,6 +244,8 @@ type Mutation {
admin__core_plugins__nav__create(code: String!, icon: String, keywords: [String!]!, parent_code: String, plugin_code: String!): ShowAdminNavPluginsObj!
admin__core_plugins__nav__delete(code: String!, parent_code: String, plugin_code: String!): String!
admin__core_plugins__nav__edit(code: String!, icon: String, keywords: [String!]!, parent_code: String, plugin_code: String!, previous_code: String!): ShowAdminNavPluginsObj!
admin__core_plugins__permissions_admin__create_edit(id: String!, old_id: String, parent_id: String, plugin_code: String!): ShowAdminPermissionsAdminPluginsObj!
admin__core_plugins__permissions_admin__delete(id: String!, parent_id: String, plugin_code: String!): String!
admin__core_plugins__upload(code: String, file: Upload!): String!
admin__core_security__captcha__edit(secret_key: String!, site_key: String!, type: CaptchaTypeEnum!): ShowAdminCaptchaSecurityObj!
admin__core_staff_administrators__create(group_id: Int, unrestricted: Boolean!, user_id: Int): ShowAdminStaffAdministrators!
Expand Down Expand Up @@ -298,6 +300,7 @@ type Query {
admin__core_members__show(cursor: Int, first: Int, groups: [Int!], id: Float, last: Int, search: String, sortBy: ShowAdminMembersSortByArgs): ShowAdminMembersObj!
admin__core_members__stats_sign_up: [SignUpStatsAdminMembers!]!
admin__core_plugins__nav__show(plugin_code: String!): [ShowAdminNavPluginsObj!]!
admin__core_plugins__permissions_admin__show(plugin_code: String!): [ShowAdminPermissionsAdminPluginsObj!]!
admin__core_plugins__show(code: String, cursor: Int, first: Int, last: Int, search: String, sortBy: ShowAdminPluginsSortByArgs): ShowAdminPluginsObj!
admin__core_security__captcha__show: ShowAdminCaptchaSecurityObj!
admin__core_staff_administrators__show(cursor: Int, first: Int, last: Int, sortBy: ShowAdminStaffAdministratorsSortByArgs): ShowAdminStaffAdministratorsObj!
Expand Down Expand Up @@ -458,6 +461,15 @@ type ShowAdminNavPluginsObj {
keywords: [String!]!
}

type ShowAdminPermissionsAdminPlugins {
id: String!
}

type ShowAdminPermissionsAdminPluginsObj {
children: [ShowAdminPermissionsAdminPlugins!]!
id: String!
}

type ShowAdminPlugins {
allow_default: Boolean!
author: String!
Expand Down
3 changes: 2 additions & 1 deletion apps/backend/src/plugins/welcome/config.json
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,6 @@
"author_url": "https://vitnode.com/",
"support_url": "https://github.com/VitNode/vitnode/issues",
"allow_default": true,
"nav": []
"nav": [],
"permissions_admin": []
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
// ! DO NOT TOUCH THIS FILE!!! IT IS GENERATED BY VITNODE-CLI
import {
DevPluginAdminLayout,
generateMetadataDevPluginAdminLayout,
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import { PermissionsAdminDevPluginAdminView } from 'vitnode-frontend/views/admin/views/core/plugins/views/dev/permissions-admin/permissions-admin';

export default function Page(
props: React.ComponentProps<typeof PermissionsAdminDevPluginAdminView>,
) {
return <PermissionsAdminDevPluginAdminView {...props} />;
}
34 changes: 34 additions & 0 deletions apps/frontend/src/graphql/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -277,6 +277,8 @@ export type Mutation = {
admin__core_plugins__nav__create: ShowAdminNavPluginsObj;
admin__core_plugins__nav__delete: Scalars['String']['output'];
admin__core_plugins__nav__edit: ShowAdminNavPluginsObj;
admin__core_plugins__permissions_admin__create_edit: ShowAdminPermissionsAdminPluginsObj;
admin__core_plugins__permissions_admin__delete: Scalars['String']['output'];
admin__core_plugins__upload: Scalars['String']['output'];
admin__core_security__captcha__edit: ShowAdminCaptchaSecurityObj;
admin__core_staff_administrators__create: ShowAdminStaffAdministrators;
Expand Down Expand Up @@ -501,6 +503,21 @@ export type MutationAdmin__Core_Plugins__Nav__EditArgs = {
};


export type MutationAdmin__Core_Plugins__Permissions_Admin__Create_EditArgs = {
id: Scalars['String']['input'];
old_id?: InputMaybe<Scalars['String']['input']>;
parent_id?: InputMaybe<Scalars['String']['input']>;
plugin_code: Scalars['String']['input'];
};


export type MutationAdmin__Core_Plugins__Permissions_Admin__DeleteArgs = {
id: Scalars['String']['input'];
parent_id?: InputMaybe<Scalars['String']['input']>;
plugin_code: Scalars['String']['input'];
};


export type MutationAdmin__Core_Plugins__UploadArgs = {
code?: InputMaybe<Scalars['String']['input']>;
file: Scalars['Upload']['input'];
Expand Down Expand Up @@ -668,6 +685,7 @@ export type Query = {
admin__core_members__show: ShowAdminMembersObj;
admin__core_members__stats_sign_up: Array<SignUpStatsAdminMembers>;
admin__core_plugins__nav__show: Array<ShowAdminNavPluginsObj>;
admin__core_plugins__permissions_admin__show: Array<ShowAdminPermissionsAdminPluginsObj>;
admin__core_plugins__show: ShowAdminPluginsObj;
admin__core_security__captcha__show: ShowAdminCaptchaSecurityObj;
admin__core_staff_administrators__show: ShowAdminStaffAdministratorsObj;
Expand Down Expand Up @@ -732,6 +750,11 @@ export type QueryAdmin__Core_Plugins__Nav__ShowArgs = {
};


export type QueryAdmin__Core_Plugins__Permissions_Admin__ShowArgs = {
plugin_code: Scalars['String']['input'];
};


export type QueryAdmin__Core_Plugins__ShowArgs = {
code?: InputMaybe<Scalars['String']['input']>;
cursor?: InputMaybe<Scalars['Int']['input']>;
Expand Down Expand Up @@ -966,6 +989,17 @@ export type ShowAdminNavPluginsObj = {
keywords: Array<Scalars['String']['output']>;
};

export type ShowAdminPermissionsAdminPlugins = {
__typename?: 'ShowAdminPermissionsAdminPlugins';
id: Scalars['String']['output'];
};

export type ShowAdminPermissionsAdminPluginsObj = {
__typename?: 'ShowAdminPermissionsAdminPluginsObj';
children: Array<ShowAdminPermissionsAdminPlugins>;
id: Scalars['String']['output'];
};

export type ShowAdminPlugins = {
__typename?: 'ShowAdminPlugins';
allow_default: Scalars['Boolean']['output'];
Expand Down
46 changes: 37 additions & 9 deletions apps/frontend/src/plugins/admin/langs/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -303,6 +303,30 @@
"desc": "This action will delete <code></code> navigation.",
"success": "Navigation has been deleted."
}
},
"permissions-admin": {
"title": "Permissions in AdminCP",
"create_edit": {
"id": {
"label": "ID",
"desc": "Unique ID for this permission.",
"exists": "Permission with this ID already exists."
},
"parent": {
"label": "Parent Permission",
"null": "No parent permission"
},
"create_success": "Permission has been created."
},
"delete": {
"desc": "This action will delete the permission <id></id>. Remember to delete all conditions associated with this permission.",
"submit": "Yes, delete permission",
"success": "Permission has been deleted.",
"children_warn": {
"title": "This permission has children",
"desc": "If you delete this permission, all children will be deleted too."
}
}
}
},
"create": {
Expand Down Expand Up @@ -577,18 +601,9 @@
},
"staff": {
"title": "Staff",
"unrestricted": "Unrestricted",
"restricted": "Restricted",
"user": "User",
"group": "Group",
"already_exists": "This permission is already on the list.",
"table": {
"administrator": "Administrator",
"moderator": "Moderator",
"type": "Type",
"updated": "Updated",
"permissions": "Permissions"
},
"create_edit": {
"type": {
"title": "Type",
Expand All @@ -600,8 +615,19 @@
"desc": "Unrestricted administrators have full access to the admin control panel (AdminCP)."
}
},
"shared": {
"type": "Type",
"updated": "Updated",
"permissions": "Permissions",
"unrestricted": "Unrestricted",
"restricted": "Restricted",
"user": "User",
"group": "Group"
},
"moderators": {
"title": "Moderators",
"desc": "Manage access to the moderator panel (ModCP).",
"moderator": "Moderator",
"add": {
"title": "Add Moderator",
"success": "Moderator has been added"
Expand All @@ -614,6 +640,8 @@
},
"administrators": {
"title": "Administrators",
"desc": "Manage access to the administrator panel (AdminCP).",
"administrator": "Administrator",
"add": {
"title": "Add Administrator",
"success": "Administrator has been added"
Expand Down
4 changes: 3 additions & 1 deletion apps/frontend/src/plugins/welcome/langs/en.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,9 @@
},
"admin_welcome": {
"nav": {
"title": "Welcome"
"title": "Welcome",
"test": "Test",
"test_testchild": "Test Child"
}
}
}
2 changes: 2 additions & 0 deletions bump-version.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,8 @@ const packages = [
'eslint-config-typescript-vitnode',
'backend-email-resend',
'backend-email-smtp',
'backend-ai-open-ai',
'backend-ai-google',
];

const getPackageJson = () => {
Expand Down
2 changes: 1 addition & 1 deletion packages/backend-ai-google/.npmignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/src
/.turbo
/node_modules
/.eslintrc.json
/eslint.config.mjs
/tsconfig.json
/.swcrc
2 changes: 1 addition & 1 deletion packages/backend-ai-open-ai/.npmignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/src
/.turbo
/node_modules
/.eslintrc.json
/eslint.config.mjs
/tsconfig.json
/.swcrc
2 changes: 1 addition & 1 deletion packages/backend-email-resend/.npmignore
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/src
/.turbo
/node_modules
/.eslintrc.json
/eslint.config.mjs
/tsconfig.json
/.swcrc
2 changes: 1 addition & 1 deletion packages/backend/.npmignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
!/src/database
/.turbo
/node_modules
/.eslintrc.json
/eslint.config.mjs
/tsconfig.json
/tsup.config.ts
/.swcrc
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ export class EditAdminNavPluginsService {
code: currentCode,
icon: icon ?? null,
keywords,
children: config.nav[navIndex]?.children,
};
}

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { ArgsType, Field } from '@nestjs/graphql';

@ArgsType()
export class CreateEditAdminPermissionsAdminPluginsArgs {
@Field(() => String)
id: string;

@Field(() => String, { nullable: true })
old_id?: string;

@Field(() => String, { nullable: true })
parent_id?: string;

@Field(() => String)
plugin_code: string;
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { AdminAuthGuards, OnlyForDevelopment } from '@/utils';
import { UseGuards } from '@nestjs/common';
import { Args, Mutation, Resolver } from '@nestjs/graphql';

import { ShowAdminPermissionsAdminPluginsObj } from '../show/show.dto';
import { CreateEditAdminPermissionsAdminPluginsArgs } from './create-edit.dto';
import { CreateEditAdminPermissionsAdminPluginsService } from './create-edit.service';

@Resolver()
export class CreateEditAdminPermissionsAdminPluginsResolver {
constructor(
private readonly service: CreateEditAdminPermissionsAdminPluginsService,
) {}

@Mutation(() => ShowAdminPermissionsAdminPluginsObj)
@UseGuards(AdminAuthGuards)
@UseGuards(OnlyForDevelopment)
async admin__core_plugins__permissions_admin__create_edit(
@Args() args: CreateEditAdminPermissionsAdminPluginsArgs,
): Promise<ShowAdminPermissionsAdminPluginsObj> {
return await this.service.createEdit(args);
}
}
Loading
Loading