diff --git a/core/lib/permissions.py b/core/lib/permissions.py
index 7dbf52059aaca04c6b1ab912845eb9601c91b274..71e53560835927daabb86b521fca31a8fee0559f 100644
--- a/core/lib/permissions.py
+++ b/core/lib/permissions.py
@@ -18,6 +18,10 @@ def is_admin_or_supervisor(user):
     return user.is_superuser or hasattr(user, "supervisor")
 
 
+def is_admin_or_supervisor_or_company(user):
+    return user.is_superuser or hasattr(user, "supervisor") or hasattr(user, "company")
+
+
 class IsAdminOrSelfOrReadOnly(permissions.BasePermission):
     def has_object_permission(self, request, view, obj):
         if request.method in permissions.SAFE_METHODS:
@@ -94,3 +98,27 @@ class IsAdminOrCompany(permissions.BasePermission):
             )
 
         return hasattr(user, "company") and user.company == company
+
+
+class IsAdminOrSupervisorOrCompany(permissions.BasePermission):
+    def has_permission(self, request, view):
+        return is_admin_or_supervisor_or_company(request.user)
+
+
+class IsAdminOrSupervisorOrCompanyOrSelf(permissions.IsAuthenticated):
+    def has_object_permission(self, request, view, obj):
+        user = request.user
+        if user.is_superuser or hasattr(user, "company") or hasattr(user, "supervisor"):
+            return True
+        if hasattr(user, "student"):
+            if isinstance(obj, Student):
+                student = obj
+            elif hasattr(obj, "student"):
+                student = obj.student
+            else:
+                raise APIException(
+                    "Checking student permission on object {} not associated with Student"
+                        .format(type(obj.__name__))
+                )
+            return hasattr(user, "student") and user.student == student
+        return False
diff --git a/core/migrations/0009_auto_20170424_0909.py b/core/migrations/0009_auto_20170424_0909.py
new file mode 100644
index 0000000000000000000000000000000000000000..151a05cfde176c36d4db2d6f3f9f9b551d61384e
--- /dev/null
+++ b/core/migrations/0009_auto_20170424_0909.py
@@ -0,0 +1,20 @@
+# -*- coding: utf-8 -*-
+# Generated by Django 1.10.5 on 2017-04-24 09:09
+from __future__ import unicode_literals
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('core', '0008_auto_20170424_0725'),
+    ]
+
+    operations = [
+        migrations.RenameField(
+            model_name='student',
+            old_name='show_resume',
+            new_name='show_transcript',
+        ),
+    ]
diff --git a/core/models/accounts.py b/core/models/accounts.py
index afb37d7c61b7f83f1801e472bba3b1309fb172e4..d371652d3f8ba85f8db3ece51a1bfdec14b6c5eb 100644
--- a/core/models/accounts.py
+++ b/core/models/accounts.py
@@ -55,7 +55,7 @@ class Student(models.Model):
     birth_date = models.DateField(blank=True, null=True)
     major = models.CharField(max_length=30, blank=True, null=True)
     batch = models.CharField(max_length=4, blank=True, null=True)
-    show_resume = models.BooleanField(default=False)
+    show_transcript = models.BooleanField(default=False)
 
     @property
     def name(self):
diff --git a/core/serializers/accounts.py b/core/serializers/accounts.py
index 986f4c4f3e4b45840ac56606b9ff869994a1ff90..195855a7555de63b2451eb73d41053ec8dafb760 100644
--- a/core/serializers/accounts.py
+++ b/core/serializers/accounts.py
@@ -16,7 +16,7 @@ class StudentSerializer(serializers.ModelSerializer):
 
     class Meta:
         model = Student
-        fields = '__all__'
+        fields = ['id', 'name', 'user', 'npm', 'resume', 'phone_number', 'birth_place', 'birth_date', 'major', 'batch', 'show_transcript']
 
 
 class CompanySerializer(serializers.ModelSerializer):
diff --git a/core/tests/test_accounts.py b/core/tests/test_accounts.py
index fe6aa42c32287d7f478ce8a647bcce67f4b7dec5..5fe32fb0955e129cfb89bbc1d971f1add288e748 100644
--- a/core/tests/test_accounts.py
+++ b/core/tests/test_accounts.py
@@ -17,6 +17,14 @@ class LoginTests(APITestCase):
                 "kodeidentitas": "1234567890",
                 "nama_role": "mahasiswa"
         }, status_code=200)
+        m.get('https://api.cs.ui.ac.id/siakngcs/mahasiswa/1234567890/', json={
+                "kota_lahir": "kota_kota",
+                "tgl_lahir": "2017-12-31",
+                "program": [{
+                    "nm_org" : "Ilmu Informasi",
+                    "angkatan" : "2017"
+                }]
+        }, status_code=200)
 
         url = '/api/login/'
 
diff --git a/core/tests/test_vacancies.py b/core/tests/test_vacancies.py
index 518a075737076084da1b7dc2ac77346445822de7..92ef204cb4bfde185dd02d4668efd43a182dde5d 100644
--- a/core/tests/test_vacancies.py
+++ b/core/tests/test_vacancies.py
@@ -18,6 +18,14 @@ class ApplicationTests(APITestCase):
             "kodeidentitas": "1234567890",
             "nama_role": "mahasiswa"
         }, status_code=200)
+        m.get('https://api.cs.ui.ac.id/siakngcs/mahasiswa/1234567890/', json={
+            "kota_lahir": "kota_kota",
+            "tgl_lahir": "2017-12-31",
+            "program": [{
+                "nm_org": "Ilmu Informasi",
+                "angkatan": "2017"
+            }]
+        }, status_code=200)
 
         url = '/api/login/'
 
@@ -40,6 +48,14 @@ class ApplicationTests(APITestCase):
             "kodeidentitas": "1234567890",
             "nama_role": "mahasiswa"
         }, status_code=200)
+        m.get('https://api.cs.ui.ac.id/siakngcs/mahasiswa/1234567890/', json={
+            "kota_lahir": "kota_kota",
+            "tgl_lahir": "2017-12-31",
+            "program": [{
+                "nm_org": "Ilmu Informasi",
+                "angkatan": "2017"
+            }]
+        }, status_code=200)
 
         url = '/api/login/'
 
@@ -71,6 +87,14 @@ class BookmarkApplicationTests(APITestCase):
             "kodeidentitas": "1234567890",
             "nama_role": "mahasiswa"
         }, status_code=200)
+        m.get('https://api.cs.ui.ac.id/siakngcs/mahasiswa/1234567890/', json={
+            "kota_lahir": "kota_kota",
+            "tgl_lahir": "2017-12-31",
+            "program": [{
+                "nm_org": "Ilmu Informasi",
+                "angkatan": "2017"
+            }]
+        }, status_code=200)
 
         url = '/api/login/'
 
@@ -93,6 +117,14 @@ class BookmarkApplicationTests(APITestCase):
             "kodeidentitas": "1234567890",
             "nama_role": "mahasiswa"
         }, status_code=200)
+        m.get('https://api.cs.ui.ac.id/siakngcs/mahasiswa/1234567890/', json={
+            "kota_lahir": "kota_kota",
+            "tgl_lahir": "2017-12-31",
+            "program": [{
+                "nm_org": "Ilmu Informasi",
+                "angkatan": "2017"
+            }]
+        }, status_code=200)
 
         url = '/api/login/'
 
diff --git a/core/views/accounts.py b/core/views/accounts.py
index dfb24c3ee873a9fbf16dcf6be957904d12fb55f4..05c3f7deac4dac50dd4cbc3cd0f3333b304b1512 100644
--- a/core/views/accounts.py
+++ b/core/views/accounts.py
@@ -9,7 +9,8 @@ from rest_framework.permissions import IsAdminUser, IsAuthenticated
 from rest_framework.response import Response
 from rest_framework.status import HTTP_400_BAD_REQUEST, HTTP_409_CONFLICT
 
-from core.lib.permissions import IsAdminOrStudent, IsAdminOrSelfOrReadOnly, IsAdminOrCompany, IsAdminOrSupervisor
+from core.lib.permissions import IsAdminOrStudent, IsAdminOrSelfOrReadOnly, IsAdminOrCompany, IsAdminOrSupervisor, \
+    IsAdminOrSupervisorOrCompany, IsAdminOrSupervisorOrCompanyOrSelf
 from core.models.accounts import Student, Company, Supervisor
 from core.serializers.accounts import UserSerializer, StudentSerializer, CompanySerializer, SupervisorSerializer, \
     LoginSerializer, RegisterSerializer
@@ -45,6 +46,10 @@ class StudentViewSet(viewsets.ModelViewSet):
     def get_permissions(self):
         if self.action == "update":
             return [IsAdminOrSelfOrReadOnly(), IsAdminOrStudent()]
+        if self.action == "list":
+            return [IsAuthenticated(), IsAdminOrSupervisorOrCompany()]
+        if self.action == "retrieve":
+            return [IsAuthenticated(), IsAdminOrSupervisorOrCompanyOrSelf()]
         return super(StudentViewSet, self).get_permissions()