gpt4 book ai didi

javascript - 引导 Strapi Angular 色权限

转载 作者:行者123 更新时间:2023-11-30 19:27:06 26 4
gpt4 key购买 nike

我是一名开发人员,第一次从事前端工作、strapi 和 javascript。我希望有人能可怜我并提供一个示例,说明如何通过 bootstrap.js 脚本设置公共(public) Angular 色权限。 Node .js v10.16.0
Strapi v3.0.0-next.11
Graphql 14.3.1
MongoDB:3.6
所有在 Windows 10 上

在Strapi UI中,就是Public Role的 Angular 色和权限 Public Role
(来源:strapi.io)

我想将这些框设置为已选中 Toggle Checkboxes
(来源:strapi.io)

另一位开发人员已使用 bootstrap.js 文件向我们创建的服务(菜单)添加项目。我不知道如何返回有关 Angular 色权限的最基本信息。我的函数称为 test() 我搜索了示例,我发现最好的是在 stackoverflow 上: Strapi Plugin Route Default Permission :

strapi.plugins['users-permissions'].models.role.find 

但我不知道如何使用它:

WORKING
function add_widgets_from_sheet(sheet_name, model_object){
console.log(`adding ${sheet_name}`)
let xlsxSheet = Sheets[sheet_name]
const widgets = XLSX.utils.sheet_to_json(xlsxSheet)

widgets.forEach(function (widget) {
//See if the object is already in the db before adding it
model_object.count(widget)
.then(result => {
if (result == 0) {
console.log('Adding '+sheet_name+': ' + JSON.stringify(widget))
return model_object.add(widget)
}
})
})
}

NOT WORKING
function test(){
console.log(`Testing ${strapi.plugins['users-permissions'].models.role.find}`)
}

module.exports = next => {

console.log('Starting Strapi bootstrap')
add_widgets_from_sheet('Menus', strapi.services.menu) //adding menus
test() // Returning nothing
console.log('Ending Strapi bootstrap')
next()
}

我想将这些复选框切换为 TRUE、CHECKED 或任何名称。这样我们就不必在每次转储数据库时都通过 UI 手动执行此操作。

我从示例中学习得最好...希望您能提供帮助。谢谢!

最佳答案

所以下面的代码来自一个名为 PROJECT/STRAPI/config/functions/bootstrap.js 的文件这会使用我们保存在 Excel 电子表格中的信息自动创建内容类型和内容。但是为了使用这些内容类型,必须激活一些 Angular 色和权限,以便 web ui 可以访问它们。基本上,我们不想手动进入 Strapi UI 来创建用户、创建内容类型、创建内容或更新权限。我们需要一个脚本来完成所有这些工作。

'use strict'

我们的环境变量

require('dotenv').config({ path:'../.env' })

保存我们数据的Excel电子表格(附后)

const XLSX = require('xlsx')
const BOOTSTRAP_DATA = XLSX.readFile(process.env.BOOTSTRAP_DATA).Sheets

从 .env 中提取的变量

const ADMIN_USERNAME = process.env.ADMIN_USERNAME
const ADMIN_PASSWORD = process.env.ADMIN_PASSWORD
const ADMIN_EMAIL = process.env.ADMIN_EMAIL

阅读 XLSX

async function bootstrap_resource(resource_type, resource_service) {
strapi.log.info(`Bootstrapping ${resource_type}`)

const resources = XLSX.utils.sheet_to_json(BOOTSTRAP_DATA[resource_type])

for (let resource of resources) {

if (await resource_service.count(resource) === 0) {
strapi.log.warn(`Bootstrapping ${resource_type}: ${JSON.stringify(resource)}`)

await resource_service.create(resource)
}
}
}

为 strapi 创建初始用户

async function bootstrap_admin() {
strapi.log.info(`Bootstrapping Admin`)

const admin_orm = strapi.admin.queries('administrator', 'admin')

const admins = await admin_orm.find({username: ADMIN_USERNAME})

if ( admins.length === 0) {
const blocked = false
const username = ADMIN_USERNAME
const password = await strapi.admin.services.auth.hashPassword(ADMIN_PASSWORD)
const email = ADMIN_EMAIL
const user = { blocked, username, password, email }

const data = await admin_orm.create(user)

strapi.log.warn(`Bootstrapped Admin User: ${JSON.stringify(user)}`)
}
}

以下是 get_roles() - get_permissions() 所必需的,而 get_permissions() 是 enable_permissions() 所必需的。这是我们打开这些内容类型的地方,以便 Web UI 可以看到它。

async function get_roles() {
const role_orm = strapi.plugins['users-permissions'].queries('role', 'users-permissions')

const role_list = await role_orm.find({}, [])

const roles = {}

for (let role of role_list) {
roles[ role._id ] = role
roles[ role.name ] = role
}

return roles
}

async function get_permissions( selected_role, selected_type, selected_controller ) {
const roles = await get_roles()
const permission_orm = strapi.plugins['users-permissions'].queries('permission', 'users-permissions')

let permission_list = await permission_orm.find({_limit: 999}, [])

if ( selected_role ) permission_list = permission_list.filter( ({ role }) => `${role}` === `${roles[selected_role]._id}` )
if ( selected_type ) permission_list = permission_list.filter( ({ type }) => `${type}` === `${selected_type}` )
if ( selected_controller ) permission_list = permission_list.filter( ({ controller }) => `${controller}` === `${selected_controller}` )

return permission_list
}

async function enable_permissions(role, type, controller) {
strapi.log.info(`Setting '${controller}' permissions for '${role}'`)

const permission_orm = strapi.plugins['users-permissions'].queries('permission', 'users-permissions')

const permissions = await get_permissions(role, type, controller)

for (let { _id } of permissions) {
permission_orm.update({ _id }, { enabled: true })
}
}

最后,我们运行程序

module.exports = async next => {

await bootstrap_admin()

await bootstrap_resource( 'Clients', strapi.services.client )
await bootstrap_resource( 'Menus', strapi.services.menu )

enable_permissions('Public', 'application', 'client' )
enable_permissions('Public', 'application', 'github' )
enable_permissions('Public', 'application', 'menu' )
enable_permissions('Public', 'application', 'confluence' )

next()
}

去掉我的注释,你就有了整个 bootstrap.js 文件。下图显示了用于填充所有内容的 demo.xlsx 工作簿的 3 个选项卡。 clients tab menus tab users tab

最后,展示结果。使用 Nuxt 的菜单(内容)、权限集和公共(public)网站。 list of menus permissions for the public users Nuxt Generate Web Page leveraging strapi

关于javascript - 引导 Strapi Angular 色权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56795531/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com