Google Drive for Coursework in an Education Apps Domain - google-docs-api

We're investigating the use of Google Drive in an Education Apps Domain.
The scenario we're considering is as follows (and we wonder if any or all of this is possible with the existing Docs API, or if it might be possible soon):
For each student /we/ create a coursework folder.
Within the coursework folder we create folders for each unit studied, eg. web101, web201 - the student then works within specific folders (and subfolders therein) for particular units.
Unit tutors and lecturers have read access to selected folders, enabling continuous formative feedback (and possibly automated feedback and monitoring).
The student does not have control over the structure of the coursework folder or the unit folders, only the work that goes within.

Google Drive provides user-managed storage, so if you create those folders in the students' accounts, they will have control over them.
A possible solution is to create all folders within a "teacher" or "admin" account and then share each of them with the corresponding student only.
All of this is currently possible with the Documents List API:
https://developers.google.com/google-apps/documents-list/

Related

Which Archimate element should I use to model a shop

I'm in the process of creating various archimate models for my organization. We offer financial services. Customers can do most of the things they require using the online portal and the mobile app.
But we also have branch offices where customers can go to get personal attention. They can get personal advice, they can ask representatives for operational tasks, or they can go to a public workstation there and do it themselves using the online portal, potentially with some assistance.
How should I model such a branch office in Archimate? Is it an Actor? Or a Business Service? Or a Business Interface? Or maybe a Product? Or just a Location? It's also a thing that's designed around a specific concept, and we have different concepts, each with a unique setup and capabilities.
You can compare such a branch office with a retail shop, or a post office. It's more than an internal element, because this is a point of contact with your customer. But what kind of element best describes it?
You can use different type of elements to model a branch office:
If you use physical elements, the branch can be a "Facility".
But probably it fits more with a "Location" that can aggregate "Resources" (Strategy Elements) o "Business Roles" that can realize "Business Services".
Consider this image, the customer is served various services (like personal advice) at (or aggregated in) a location assigned to the physical facility. Hope this answers your doubt.

Neo4J Multi Tenancy and Role Based Access to Nodes

I am trying to define a user management and permissions model for Neo4j. I have a web application (Angular 2) that connects to Neo4j via an API (KOANEO4J). Neo4j is the only database or persistent storage that the application uses. Through the application a user can add/edit/delete content which uses the API to carry out these instructions in Neo4j by running Cypher Statements. Up to now I have not worried about supporting multiple users but as a next step I am starting to think about this.
The product will be used by multiple different companies and each company will have multiple users so I need some way to support this. The model I am considering in Neo4J is as follows:
An "Orgaization" is represented by a node and it can have 1 or more "Organization Catalogs". All of the nodes belonging to that catalog will be children of one of the "Organization Catalogs".
Each user will also be represented by a node in the database. They will belong to an Organisation. They will have certain access permissions on an Organization Catalog identified by a an edge.
I am looking for some advice on whether or not this is an appropriate model to follow or if there are any examples or documents that describe how to achieve this in Neo4j.
If I do implement this model then would it be better to model the permissions as seperate nodes so a user is connected to a permission node (e.g. Read Only Access) that is then connected to the Organization Catalog.
Any suggestions on how I would actually get the API to work with this type of model. I'm sure I can pass the User Id to Neo4j as part of each query and then filter the results to show only nodes the user has access to but this doesn't seem like a very elegant solution - it also means that all of the security would be dependant on carefully written Cypher queries that don't leak data that a user isnt supposed to access.
Thanks a lot
I am looking for some advice on whether or not this is an appropriate
model to follow or if there are any examples or documents that
describe how to achieve this in Neo4j.
The answer for this question is: it depends. Remember that when modelling a graph database you should consider the queries that are asked to the database. If this model fits the queries that you are asking to the database then this model is appropriated, otherwise, not. Take a look in the Chapter 5 (Graphs in the Real World) of the book Graph Databases (by Ian Robison, Jim Webber and Emil Eifrem. Available for download here). This chapter shows the modelling process of an Authorization and Access Control system in Neo4j. Can be enlightening and helpful to you.
If I do implement this model then would it be better to model the
permissions as seperate nodes so a user is connected to a permission
node (e.g. Read Only Access) that is then connected to the
Organization Catalog.
Again, it depends. Do it if the Permission entity has connection to others entities of your application besides an User and an Organization Catalog. Otherwise I believe that your permission can be modeled as a relationship between an user and an organization catalog.
Any suggestions on how I would actually get the API to work with this
type of model. I'm sure I can pass the User Id to Neo4j as part of
each query and then filter the results to show only nodes the user has
access to but this doesn't seem like a very elegant solution - it also
means that all of the security would be dependant on carefully written
Cypher queries that don't leak data that a user isnt supposed to
access.
Maybe is a good idea add another layer of software between your AngularJS client app and the Neo4j database. This way in this new layer of software (a Node.js application, for example) you can implement a access control system, then verifiy if the authenticated user can access the resource that is being requested.

Umbraco 7 back-office user access control

This issue may have a bearing on whether we use Umbraco for a given company or use something else.
The company has both an intranet and web site(s) running on an old bespoke system which is scheduled to be replaced.
Having tested Umbraco extensively and built mock-up sites, I am very impressed with its flexibility, and I strongly suspect it would work for the web estate.
However,the intranet is first to be replaced and, as per an earlier post, the issue is here that that are a number of document types that comprise the intranet, and any one of the employees (and there are thousands) can create, publish and edit their own documents, but can't edit documents created by other users.
Also, they will have logged in to Windows and don't wan't to log in to again to edit documents in the intanet CMS.
The questions are
Can users be automatically logged into Umbraco back-office by intergrating with Active Directory?
If so, can this handle thousands of such users?
Is there any way of preventing users from editing each others' documents (as far as I can see, if we allow users to create, update and publish, they can edit documents created by other users as long as the documents are under their starting node). I suppose we could make a staring node for each user and all their documents go under that - but then this would make the node structure massive, unmanageable, and, I suspect, slow.
Admins should be able to edit anything.
Reading the above back it looks very much to me that Umbraco just isn't suitable for an intranet (and to be fair, it's not promoted as such), but its user access system is it's big failing. and I think it might make it a non-starter....
about Active Directory I answered your question in your 2nd thread here: Umbraco - members creating back-end content.
Regarding your concerns about Tree structure and blocking content, you can restrict permissions for each user to allow or dissalow specific actions for specific node (with / without children nodes).
Of course, it depends from requirements and desired solution. If you want to have shared three, but block some actions for specific users - this is the way. If you don't want to allow other users to even see structure of trees managed by other users - it will be better to create different parent nodes for them and restrict access only to those one.
The same options are visible when you right click on node and choose "Permissions".

Method(s) to Associate Text File with neo4j Node

How would one associate a file with a node in neo4j? For instance, I have ' Company ' nodes, which refer to companies that have issued investment securities. I would like to link the node to the file that has a basic description of what that company offers for sale. In other programs, I would add a hyperlink to the file.
The neo4j instance is running on a single computer as part of my personal workflow, so I do not need to concern myself with network connectivity or sharing w/ colleagues, etc. at this point.
Also, I reviewed two seemingly-related questions, including the one entitled Neo4J: Binary File storage and Text Search "stack", but neither seems to fit the bill.
Thoughts?
You can store a reference to the file as a property on the node. This can be either a URL or an id referencing the file in another database system (such as MongoDB).

google drive sdk and the handling of folders

I'm considering adding support for Google Drive in an iOS application I've written. That's not my issue - there is plenty of decent documentation on how to do that.
My issue is that the data source for this application is a folder. This folder could conceivably contain dozens of (nested) child folders and hundreds of files sprinkled throughout.
When I scour the documentation for Google Drive, there's plenty of information on the treatment of individual files; there is however very little information on the treatment of folders (other than folders appear to have a unique MIME type).
So assuming I can run a query to identify a GTLDriveFile that references a folder (data source) I'm interested in, I need to download the entire contents of that folder - hierarchical organization intact - to my application's sandbox. BTW, this application is primarily for tablets (iPad).
How do I do that?
Thanks,
The Google Drive model is internally a flat model with pointers to parents and children, any implementation that projects it into a traditional tree based model needs careful consideration.
Since I don't work in iOS, I'll try to keep it general, referring to JAVA code snippets; it should be easy to translate it to any language (believe iOS has some king of 'C' flavor).
So, every attempt to retrieve folders/files has to start with the Drive root, enumerating it's children. For instance, in new Google Drive API (GDAA) you'll use either.
DriveFolder.listChildren(gac).await()
DriveFolder.queryChildren(gac, query).await();
where 'gac' is GoogleApiClient instance and 'query' comes from Query.Builder()... .
As you keep going, you're getting metadata of objects, giving you full info about the object (mime, status, title, type,...), you handle duplicates (yes you can have multiple folders/files with the same name - but unique IDs). When you hit folder, start another iteration. In the process, you may cache the structure using folders' / files' unique RESOURCE IDs' (the string you see in http address of a file / folder).
There are 2 different APIs in Java/Android world at the moment, the old RESTFul API and the new GDAA (and I don't know how it applies to iOS). And I have some code here, showing recursion down the tree (buildTree()), and code that handles duplicate file/folder names in (findFirst()). But unfortunately it is Java under GDAA flavor, so it may not be very useful to your case.
One more thing worth mentioning is, that you can 'list' or 'query' children of only one folder level (not it's subfolders), or you can query (but not list) all objects globally within your current scope (FILE scope only in GDAA, many scopes in RESTful).

Resources