@dax-crafta/auth 1.2.7 → 1.2.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/src/models/role.js +33 -0
- package/src/services/role.service.js +48 -0
package/package.json
CHANGED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
const mongoose = require('mongoose');
|
|
2
|
+
|
|
3
|
+
const roleSchema = new mongoose.Schema({
|
|
4
|
+
name: {
|
|
5
|
+
type: String,
|
|
6
|
+
required: true,
|
|
7
|
+
unique: true
|
|
8
|
+
},
|
|
9
|
+
permissions: [{
|
|
10
|
+
resource: String,
|
|
11
|
+
actions: [{
|
|
12
|
+
type: String,
|
|
13
|
+
enum: ['create', 'read', 'update', 'delete', 'manage']
|
|
14
|
+
}]
|
|
15
|
+
}],
|
|
16
|
+
description: String,
|
|
17
|
+
isSystem: {
|
|
18
|
+
type: Boolean,
|
|
19
|
+
default: false
|
|
20
|
+
},
|
|
21
|
+
createdAt: {
|
|
22
|
+
type: Date,
|
|
23
|
+
default: Date.now
|
|
24
|
+
},
|
|
25
|
+
updatedAt: Date
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
roleSchema.pre('save', function(next) {
|
|
29
|
+
this.updatedAt = new Date();
|
|
30
|
+
next();
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
module.exports = mongoose.model('Role', roleSchema);
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
const Role = require('../models/role');
|
|
2
|
+
|
|
3
|
+
class RoleService {
|
|
4
|
+
async createRole(roleData) {
|
|
5
|
+
const role = new Role(roleData);
|
|
6
|
+
await role.save();
|
|
7
|
+
return role;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
async getRoleByName(name) {
|
|
11
|
+
return Role.findOne({ name });
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
async updateRole(name, updates) {
|
|
15
|
+
return Role.findOneAndUpdate(
|
|
16
|
+
{ name },
|
|
17
|
+
updates,
|
|
18
|
+
{ new: true, runValidators: true }
|
|
19
|
+
);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
async deleteRole(name) {
|
|
23
|
+
const role = await Role.findOne({ name });
|
|
24
|
+
if (role.isSystem) {
|
|
25
|
+
throw new Error('Cannot delete system role');
|
|
26
|
+
}
|
|
27
|
+
await role.remove();
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
async assignPermissions(roleName, permissions) {
|
|
31
|
+
const role = await Role.findOne({ name: roleName });
|
|
32
|
+
role.permissions = permissions;
|
|
33
|
+
await role.save();
|
|
34
|
+
return role;
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
async checkPermission(role, resource, action) {
|
|
38
|
+
const roleDoc = await Role.findOne({ name: role });
|
|
39
|
+
if (!roleDoc) return false;
|
|
40
|
+
|
|
41
|
+
return roleDoc.permissions.some(p =>
|
|
42
|
+
p.resource === resource &&
|
|
43
|
+
(p.actions.includes(action) || p.actions.includes('manage'))
|
|
44
|
+
);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
module.exports = RoleService;
|