mirror of
https://github.com/HeyPuter/puter.git
synced 2026-09-22 21:26:04 +00:00
dev(perms): [+] apps-of-user:<user-uuid>:read
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
const { UserActorType } = require('../../services/auth/Actor');
|
||||
const { PermissionImplicator, PermissionUtil } = require('../../services/auth/permissionUtils.mjs');
|
||||
const BaseService = require('../../services/BaseService');
|
||||
|
||||
class AppPermissionService extends BaseService {
|
||||
async _init () {
|
||||
const svc_permission = this.services.get('permission');
|
||||
svc_permission.register_implicator(PermissionImplicator.create({
|
||||
id: 'user-can-grant-read-own-apps',
|
||||
matcher: permission => {
|
||||
return permission.startsWith('apps-of-user:');
|
||||
},
|
||||
checker: async ({ actor, permission }) => {
|
||||
if ( ! (actor.type instanceof UserActorType) ) {
|
||||
return undefined;
|
||||
}
|
||||
|
||||
const parts = PermissionUtil.split(permission);
|
||||
if ( parts[1] === actor.type.user.uuid ) {
|
||||
return {};
|
||||
}
|
||||
},
|
||||
}));
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
AppPermissionService,
|
||||
};
|
||||
@@ -37,6 +37,9 @@ class AppsModule extends AdvancedBase {
|
||||
|
||||
const RecommendedAppsService = require('./RecommendedAppsService');
|
||||
services.registerService('recommended-apps', RecommendedAppsService);
|
||||
|
||||
const { AppPermissionService } = require('./AppPermissionService');
|
||||
services.registerService('app-permission', AppPermissionService);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||
*/
|
||||
const { AppUnderUserActorType } = require('../../services/auth/Actor');
|
||||
const { PermissionUtil } = require('../../services/auth/permissionUtils.mjs');
|
||||
const { Context } = require('../../util/context');
|
||||
const { Eq, Or } = require('../query/query');
|
||||
const { BaseES } = require('./BaseES');
|
||||
@@ -28,7 +29,14 @@ class AppLimitedES extends BaseES {
|
||||
async select (options) {
|
||||
const actor = Context.get('actor');
|
||||
|
||||
app_under_user_check:
|
||||
if ( actor.type instanceof AppUnderUserActorType ) {
|
||||
const svc_permission = Context.get('services').get('permission');
|
||||
const perm = PermissionUtil.join('apps-of-user', actor.type.user.uuid, 'read');
|
||||
const can_read_any = await svc_permission.check(actor, perm);
|
||||
|
||||
if ( can_read_any ) break app_under_user_check;
|
||||
|
||||
if ( this.exception && typeof this.exception === 'function' ) {
|
||||
this.exception = await this.exception();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user