WARNING: This server is unstable and will be retired in the next days. If you want to keep this forum available, please request immediately a migration on the Nabble Support forum. Forums that don't receive any migration request will be deleted forever.

 « Return to Thread: [Building Sakai] Use of GradebookService as a web service

Re: [Building Sakai] Use of GradebookService as a web service

by Steve Swinsburg-3 :: Rate this Message:

| View in Thread

I think that error message is a red herring. Its not the correct reason anyway. 

In this:
http://source.sakaiproject.org/release/edu-services/1.1.5/xref/org/sakaiproject/component/gradebook/GradebookServiceHibernateImpl.html#1575

There are two places where that is thrown:
 if (!authz.isUserAbleToGrade(gradebook.getUid())) {
1554 				  throw new SecurityException("User " + authn.getUserUid() + 
1555 						  " attempted to access grade information without permission in gb " + 
1556 						  gradebook.getUid() + " using gradebookService.getGradesForStudentsForItem");
1557 			  }
which is above this section:

if (!studentIdEnrRecMap.containsKey(studentId)) {
1576 						  throw new SecurityException("User " + authn.getUserUid() + 
1577 						  " attempted to access grade information for student " + studentId + 
1578 						  " without permission in gb " + gradebook.getUid() + 
1579 						  " using gradebookService.getGradesForStudentsForItem");
1580 					  }
The first is correct since it is checking the permissions, the second is actually just checking if an enrolment record exists in a map, but the error is the same. 

The cause of this being empty is probably here:

1560 			  Map enrRecFunctionMap = authz.findMatchingEnrollmentsForItem(gradebook.getUid(), categoryId, gradebook.getCategory_type(), null, null);
And in checking through that it ends up at:

AuthzSakai2Impl.findMatchingEnrollmentsForItemOrCourseGrade

which again does permission checks, so take a look through there and check you have all of the permissions set.

Can you perhaps post the grade book related permissions for this role and we can compare them with a standard set?


cheers,
Steve


On 30/05/2012, at 8:00 PM, Shoji Kajita wrote:

Hi Steve,

Thank you for your detailed analysis.

After setting the proper role (gradebook.gradeAll) as you suggested, I
have faced another similar exception:

java.lang.SecurityException : User d14275f2-bd9b-4b9d-99e1-91869bfc1fc1 attempted to access grade information for student student0162 without permission in gb 0279a90b-61ab-4b58-86ce-70e4ef937906 using gradebookService.getGradesForStudentsForItem

As far as I digged by remote debugging using eclipse, the above
exception is caused because studentIdEnrRecMap() is null at

http://source.sakaiproject.org/release/edu-services/1.1.5/xref/org/sakaiproject/component/gradebook/GradebookServiceHibernateImpl.html#1575

and this null is caused because enrRecFunctionMap() is also null at

http://source.sakaiproject.org/release/edu-services/1.1.5/xref/org/sakaiproject/component/gradebook/GradebookServiceHibernateImpl.html#1560

... I need to trace more but do you have any suggestions at this moment?

Shoji

At Wed, 23 May 2012 08:06:37 +1000,
Steve Swinsburg wrote:

It works via the permission I sent earlier. So tick that in the role for the realm and you should be set.

I'm not near a computer but it would be good to verify the permissions for grade book in the default project site realm roles. I use the grade book in project sites.

Cheers
Steve

Sent from my iPhone

On 23/05/2012, at 0:59, Shoji Kajita <kajita@...> wrote:

Hi there,

Thank you for your suggestions.

I think that Aaron is getting the point, i.e., the worksite I'm using
is a project site, not a course site.

So, I think that isUserAbleToGrade should be true even if in Maintain
Role to reduce this kind of confusion.

Shoji at Kyoto (not Nagoya)

At Mon, 21 May 2012 10:50:43 -0400,
Aaron Zeckoski wrote:

Yeah, that should probably check a permission like site.upd or
section.role.instructor or something to that effect. Checking the role
directly is definitely not the way to go.

-AZ


On Mon, May 21, 2012 at 10:42 AM, David Horwitz <david.horwitz@...> wrote:
Also assuming that Role.INSTRUCTOR is "Instructor" this fails on systems
that use other role names (for localisation or i18n)

D


On 05/21/2012 04:32 PM, Matthew Jones wrote:

Hmm,

It's possible that could be a bug, try it in a course site with an
instructor.

It looks like the call for isUserAbleToGrade checks specific INSTRUCTOR and
QA roles, so might not work in a project site. It should probably check
against the specific maintain role defined on the site as well.

 public boolean isUserAbleToGrade(String gradebookUid, String userUid) {
     return (getSectionAwareness().isSiteMemberInRole(gradebookUid,
userUid, Role.INSTRUCTOR) ||
getSectionAwareness().isSiteMemberInRole(gradebookUid, userUid, Role.TA));
   }

Otherwise verify that in that realm that user has all permissions to grade.
This looks suspicious though.

On Mon, May 21, 2012 at 7:16 AM, Shoji Kajita <kajita@...> wrote:

Hi Chuck and Matthew,

Thank you for your advices.

I'm now taking a look on these pointers and getting close to
work. However, I'm still getting the following exception:

java.lang.SecurityException : User shoji attempted to access grade
information for student kajita without permission in gb
8e328a23-c343-40cc-bcb0-547553b9cd46 using
gradebookService.getGradesForStudentsForItem

As far as I see, "shoji" has the permission to grade because he has the
maintain role.

Any thoughts?

Best regards,
Shoji

At Sun, 20 May 2012 12:59:33 -0400,
Charles Severance wrote:

[1  <text/plain; us-ascii (quoted-printable)>]
Shoji,

If you look here


https://source.sakaiproject.org/svn//basiclti/trunk/basiclti-blis/src/java/org/sakaiproject/blti/ServiceServlet.java

You will find some simple calls to the gradebook service to set grades.

Here


https://source.sakaiproject.org/svn//basiclti/trunk/basiclti-portlet/src/java/org/sakaiproject/portlets/IMSBLTIPortlet.java

It makes gradebook items.

I borrowed the code from the Assignments tool/

/Chuck


At Sat, 19 May 2012 23:50:30 -0400,
Matthew Jones wrote:

Hi Shoji!

This probably just looks like a confusing special case. You have to use
component manager to get the beans from the spring components, then cast
it
to the interfaces (apis) that are in shared.

For gradebook, they're probably just named differently, for whatever
reason.

Look at this webservice for some example gradebook code for getting
gradebooks and grades. Hopefully you can use this for whatever you need.

https://source.sakaiproject.org/svn/msub/longsight.com/webservices/webservices-1.0.x/axis/src/webapp/WSLongsight.jws


And I think this one on confluence still works too?

https://confluence.sakaiproject.org/display/~steve.swinsburg/Additional+web+services+for+Sakai#AdditionalwebservicesforSakai-SakaiGradebook

-Matthew

On Sat, May 19, 2012 at 10:13 PM, Shoji Kajita <kajita@...>
wrote:

Dear Sakai Developers,

I'm trying to develop a new web service for getting information from
Gradebook, but I have been struggling from using GradebookService.

For example, I can call

gradebookService.isGradebookDefined

successfully when I use

gradebookService = (GradebookService)

ComponentManager.get("org.sakaiproject.service.gradebook.GradebookService");

as seen in the following simple code. But, it is failed when I use

gradebookService = (GradebookService)

ComponentManager.get("org.sakaiproject.service.gradebook.shared.GradebookService");

in line 31. I'm probably misunderstanding something.

I really appreciate if someone gives me any pointer to address this.

Best regards,
Shoji Kajita
Kyoto University
----
01: import org.apache.axis.AxisFault;
02: import org.apache.commons.logging.Log;
03: import org.apache.commons.logging.LogFactory;
04: import org.sakaiproject.service.gradebook.shared.GradebookService;
05: import org.sakaiproject.tool.api.Session;
06: import org.sakaiproject.tool.api.SessionManager;
07: import org.sakaiproject.component.cover.ComponentManager;
08:
09: public class CourseGradebook {
10:
11:     private GradebookService gradebookService;
12:     private SessionManager sessionManager;
13:
14:     private static Log LOG =
LogFactory.getLog(CourseGradebook.class);
15:
16:     private Session establishSession(String sessionId) throws
AxisFault
17:     {
18:             Session s = sessionManager.getSession(sessionId);
19:
20:             if (s == null)
21:             {
22:                     throw new AxisFault("Session \""+sessionId+"\"
is
not active");
23:             }
24:             s.setActive();
25:             sessionManager.setCurrentSession(s);
26:             return s;
27:     }
28:
29:     public CourseGradebook() {
30:     //      gradebookService = (GradebookService)
ComponentManager.get(GradebookService.class.getName());
31:             gradebookService = (GradebookService)

ComponentManager.get("org.sakaiproject.service.gradebook.shared.GradebookService");
32:     //      gradebookService = (GradebookService)

ComponentManager.get("org.sakaiproject.service.gradebook.GradebookService");
33:             sessionManager = (SessionManager)
ComponentManager.get(SessionManager.class.getName());
34:     }
35:
36:     public String getCompletedDate(String sessionId, String
siteId)
throws AxisFault {
37:
38:             Session session = establishSession(sessionId);
39:
40:         String gbID = siteId;
41:         if (!gradebookService.isGradebookDefined(gbID)) {
42:             System.out.println("Debug: Not found.");
43:             return "No gradebook found for this site.";
44:         }
45:         return "Gradebook found for this site.";
46:     }
47:
48: }
-----
_______________________________________________
sakai-dev mailing list
sakai-dev@...
http://collab.sakaiproject.org/mailman/listinfo/sakai-dev

TO UNSUBSCRIBE: send email to
sakai-dev-unsubscribe@... with a subject of
"unsubscribe"





_______________________________________________
sakai-dev mailing list
sakai-dev@...
http://collab.sakaiproject.org/mailman/listinfo/sakai-dev

TO UNSUBSCRIBE: send email to sakai-dev-unsubscribe@...
with a subject of "unsubscribe"



_______________________________________________
sakai-dev mailing list
sakai-dev@...
http://collab.sakaiproject.org/mailman/listinfo/sakai-dev

TO UNSUBSCRIBE: send email to sakai-dev-unsubscribe@...
with a subject of "unsubscribe"



--
Aaron Zeckoski - Software Architect - http://tinyurl.com/azprofile
_______________________________________________
sakai-dev mailing list
sakai-dev@...
http://collab.sakaiproject.org/mailman/listinfo/sakai-dev

TO UNSUBSCRIBE: send email to sakai-dev-unsubscribe@... with a subject of "unsubscribe"
_______________________________________________
sakai-dev mailing list
sakai-dev@...
http://collab.sakaiproject.org/mailman/listinfo/sakai-dev

TO UNSUBSCRIBE: send email to sakai-dev-unsubscribe@... with a subject of "unsubscribe"


_______________________________________________
sakai-dev mailing list
sakai-dev@...
http://collab.sakaiproject.org/mailman/listinfo/sakai-dev

TO UNSUBSCRIBE: send email to sakai-dev-unsubscribe@... with a subject of "unsubscribe"

 « Return to Thread: [Building Sakai] Use of GradebookService as a web service