153 lines
4.0 KiB
TypeScript
153 lines
4.0 KiB
TypeScript
import { ROLE_TYPE_ANONYMOUS, ROLE_TYPE_ROOT, ROLE_TYPE_USER } from '../constants';
|
|
|
|
export default async function(db) {
|
|
const User = db.getModel('users');
|
|
const users = await User.bulkCreate([
|
|
{ username: 'user1', token: 'token1' },
|
|
{ username: 'user2', token: 'token2' },
|
|
{ username: 'user3', token: 'token3' },
|
|
{ username: 'user4', token: 'token4' },
|
|
]);
|
|
|
|
const Role = db.getModel('roles');
|
|
const roles = await Role.bulkCreate([
|
|
{ title: '匿名用户', type: ROLE_TYPE_ANONYMOUS },
|
|
{ title: '普通用户' },
|
|
{ title: '编辑' },
|
|
{ title: '管理员', type: ROLE_TYPE_ROOT },
|
|
]);
|
|
|
|
const Scope = db.getModel('scopes');
|
|
const scopePublished = await Scope.create({ collection_name: 'posts', filter: { status: 'published' } }, { logging: true });
|
|
// TODO(bug): 字段应使用 'created_by' 名称,通过程序映射成外键
|
|
const scopeCreatedBy = await Scope.create({ collection_name: 'posts', filter: { status: 'draft', 'created_by_id.$currentUser': true } });
|
|
|
|
const Field = db.getModel('fields');
|
|
const postTitleField = await Field.findOne({
|
|
where: {
|
|
name: 'title',
|
|
collection_name: 'posts'
|
|
}
|
|
});
|
|
const postStatusField = await Field.findOne({
|
|
where: {
|
|
name: 'status',
|
|
collection_name: 'posts'
|
|
}
|
|
});
|
|
const postCategoryField = await Field.findOne({
|
|
where: {
|
|
name: 'category',
|
|
collection_name: 'posts'
|
|
}
|
|
});
|
|
|
|
// 匿名用户
|
|
await roles[0].updateAssociations({
|
|
permissions: [
|
|
{
|
|
collection_name: 'posts',
|
|
actions: [
|
|
{
|
|
name: 'posts:list',
|
|
scope: scopePublished,
|
|
}
|
|
],
|
|
fields_permissions: [
|
|
{
|
|
field_id: postTitleField[Field.primaryKeyAttribute],
|
|
actions: ['posts:list']
|
|
}
|
|
]
|
|
},
|
|
{
|
|
collection_name: 'categories',
|
|
actions: [
|
|
{ name: 'posts:list' }
|
|
]
|
|
}
|
|
]
|
|
}, { migrate: false });
|
|
|
|
// 普通用户
|
|
await roles[1].updateAssociations({
|
|
users: [users[0], users[3]],
|
|
permissions: [
|
|
{
|
|
collection_name: 'posts',
|
|
actions: [
|
|
{
|
|
name: 'posts:list',
|
|
scope: scopeCreatedBy,
|
|
},
|
|
{
|
|
name: 'posts:update',
|
|
scope: scopeCreatedBy,
|
|
}
|
|
],
|
|
fields: [
|
|
{
|
|
id: postTitleField.id,
|
|
fields_permissions: { actions: ['posts:list', 'posts:create', 'posts:update'] }
|
|
},
|
|
{
|
|
id: postStatusField.id,
|
|
fields_permissions: { actions: ['posts:list'] }
|
|
},
|
|
{
|
|
id: postCategoryField.id,
|
|
fields_permissions: { actions: ['posts:list'] }
|
|
},
|
|
]
|
|
}
|
|
]
|
|
}, { migrate: false });
|
|
|
|
// 编辑
|
|
await roles[2].updateAssociations({
|
|
users: [users[1], users[3]],
|
|
permissions: [
|
|
{
|
|
collection_name: 'posts',
|
|
actions: [
|
|
{
|
|
name: 'posts:update'
|
|
}
|
|
],
|
|
fields_permissions: [
|
|
{
|
|
field_id: postTitleField[Field.primaryKeyAttribute],
|
|
actions: ['posts:update']
|
|
},
|
|
{
|
|
field_id: postStatusField[Field.primaryKeyAttribute],
|
|
actions: ['posts:update']
|
|
},
|
|
{
|
|
field_id: postCategoryField[Field.primaryKeyAttribute],
|
|
actions: ['posts:update']
|
|
},
|
|
]
|
|
},
|
|
{
|
|
collection_name: 'categories',
|
|
actions: [
|
|
{ name: 'posts:create' },
|
|
{ name: 'posts:update' },
|
|
{ name: 'posts:destroy' },
|
|
]
|
|
}
|
|
]
|
|
}, { migrate: false });
|
|
|
|
// 管理员
|
|
|
|
const Post = db.getModel('posts');
|
|
await Post.bulkCreate([
|
|
{ title: 'title1', created_by_id: users[0].id, status: 'draft' },
|
|
{ title: 'title2', created_by_id: users[0].id, status: 'draft' },
|
|
{ title: 'title3', created_by_id: users[1].id, status: 'draft' },
|
|
{ title: 'title4', created_by_id: users[3].id, status: 'draft' },
|
|
]);
|
|
}
|