You could add two array fields to the category. In one you store the ids of users that have read access, in the other you store ids of users that have write access.
You could make a recursive function like this, which would work with infinitely nestable categories.
It returns true if the user has access rights to the category, or access rights to any of its parents.
checkPermission(categoryId, userId){
let category = Categories.findOne(categoryId)
if (_.contains(category.write, userId)){
return true
} else if (category.parentId){
return checkPermission(parentId, userId)
} else {
return false
}
}