Skip to content

Commit

Permalink
[#1210] Add user object to context in controllers
Browse files Browse the repository at this point in the history
The base controller already checked whether there was a user object in
the db for the user name provided. If we added it to the context we save
the same check on check_access.
  • Loading branch information
amercader committed Aug 28, 2013
1 parent 9488125 commit 1988837
Show file tree
Hide file tree
Showing 9 changed files with 102 additions and 67 deletions.
7 changes: 5 additions & 2 deletions ckan/controllers/admin.py
Expand Up @@ -4,6 +4,7 @@
import ckan.lib.helpers as h
import ckan.lib.app_globals as app_globals
import ckan.model as model
import ckan.logic as logic
import ckan.new_authz

c = base.c
Expand All @@ -19,8 +20,10 @@ class AdminController(base.BaseController):
def __before__(self, action, **params):
super(AdminController, self).__before__(action, **params)
context = {'model': model,
'user': c.user}
if not ckan.new_authz.is_authorized('sysadmin', context, {})['success']:
'user': c.user, 'auth_user_obj': c.userobj}
try:
logic.check_access('sysadmin', context, {})
except logic.NotAuthorized:
base.abort(401, _('Need to be system administrator to administer'))
c.revision_change_state_allowed = True

Expand Down
26 changes: 14 additions & 12 deletions ckan/controllers/api.py
Expand Up @@ -52,7 +52,8 @@ def __call__(self, environ, start_response):

self._identify_user()
try:
context = {'model': model, 'user': c.user or c.author}
context = {'model': model, 'user': c.user or c.author,
'auth_user_obj': c.userobj}
logic.check_access('site_read', context)
except NotAuthorized:
response_msg = self._finish(403,
Expand Down Expand Up @@ -161,7 +162,7 @@ def action(self, logic_function, ver=None):
_('Action name not known: %s') % logic_function)

context = {'model': model, 'session': model.Session, 'user': c.user,
'api_version': ver}
'api_version': ver, 'auth_user_obj': c.userobj}
model.Session()._context = context
return_dict = {'help': function.__doc__}
try:
Expand Down Expand Up @@ -248,7 +249,8 @@ def _get_action_from_map(self, action_map, register, subregister):

def list(self, ver=None, register=None, subregister=None, id=None):
context = {'model': model, 'session': model.Session,
'user': c.user, 'api_version': ver}
'user': c.user, 'api_version': ver,
'auth_user_obj': c.userobj}
log.debug('listing: %s' % context)
action_map = {
'revision': 'revision_list',
Expand Down Expand Up @@ -292,7 +294,7 @@ def show(self, ver=None, register=None, subregister=None,
action_map[('dataset', type)] = 'package_relationships_list'

context = {'model': model, 'session': model.Session, 'user': c.user,
'api_version': ver}
'api_version': ver, 'auth_user_obj': c.userobj}
data_dict = {'id': id, 'id2': id2, 'rel': subregister}

log.debug('show: %s' % context)
Expand Down Expand Up @@ -327,7 +329,7 @@ def create(self, ver=None, register=None, subregister=None,
action_map[('dataset', type)] = 'package_relationship_create_rest'

context = {'model': model, 'session': model.Session, 'user': c.user,
'api_version': ver}
'api_version': ver, 'auth_user_obj': c.userobj}
log.debug('create: %s' % (context))
try:
request_data = self._get_request_data()
Expand Down Expand Up @@ -390,7 +392,7 @@ def update(self, ver=None, register=None, subregister=None,
action_map[('dataset', type)] = 'package_relationship_update_rest'

context = {'model': model, 'session': model.Session, 'user': c.user,
'api_version': ver, 'id': id}
'api_version': ver, 'id': id, 'auth_user_obj': c.userobj}
log.debug('update: %s' % (context))
try:
request_data = self._get_request_data()
Expand Down Expand Up @@ -442,7 +444,7 @@ def delete(self, ver=None, register=None, subregister=None,
action_map[('dataset', type)] = 'package_relationship_delete_rest'

context = {'model': model, 'session': model.Session, 'user': c.user,
'api_version': ver}
'api_version': ver, 'auth_user_obj': c.userobj}

data_dict = {'id': id, 'id2': id2, 'rel': subregister}

Expand Down Expand Up @@ -597,7 +599,7 @@ def tag_counts(self, ver=None):
c.q = request.params.get('q', '')

context = {'model': model, 'session': model.Session,
'user': c.user or c.author}
'user': c.user or c.author, 'auth_user_obj': c.userobj}

tag_names = get_action('tag_list')(context, {})
results = []
Expand Down Expand Up @@ -632,7 +634,7 @@ def user_autocomplete(self):
user_list = []
if q:
context = {'model': model, 'session': model.Session,
'user': c.user or c.author}
'user': c.user or c.author, 'auth_user_obj': c.userobj}

data_dict = {'q': q, 'limit': limit}

Expand Down Expand Up @@ -696,7 +698,7 @@ def dataset_autocomplete(self):
package_dicts = []
if q:
context = {'model': model, 'session': model.Session,
'user': c.user or c.author}
'user': c.user or c.author, 'auth_user_obj': c.userobj}

data_dict = {'q': q, 'limit': limit}

Expand All @@ -712,7 +714,7 @@ def tag_autocomplete(self):
tag_names = []
if q:
context = {'model': model, 'session': model.Session,
'user': c.user or c.author}
'user': c.user or c.author, 'auth_user_obj': c.userobj}

data_dict = {'q': q, 'limit': limit}

Expand All @@ -731,7 +733,7 @@ def format_autocomplete(self):
formats = []
if q:
context = {'model': model, 'session': model.Session,
'user': c.user or c.author}
'user': c.user or c.author, 'auth_user_obj': c.userobj}
data_dict = {'q': q, 'limit': limit}
formats = get_action('format_autocomplete')(context, data_dict)

Expand Down
4 changes: 2 additions & 2 deletions ckan/controllers/feed.py
Expand Up @@ -47,7 +47,7 @@ def _package_search(data_dict):
* unless overridden, sets a default item limit
"""
context = {'model': model, 'session': model.Session,
'user': c.user or c.author}
'user': c.user or c.author, 'auth_user_obj': c.userobj}

if 'sort' not in data_dict or not data_dict['sort']:
data_dict['sort'] = 'metadata_modified desc'
Expand Down Expand Up @@ -170,7 +170,7 @@ def _alternate_url(self, params, **kwargs):
def group(self, id):
try:
context = {'model': model, 'session': model.Session,
'user': c.user or c.author}
'user': c.user or c.author, 'auth_user_obj': c.userobj}
group_dict = logic.get_action('group_show')(context, {'id': id})
except logic.NotFound:
base.abort(404, _('Group not found'))
Expand Down
6 changes: 4 additions & 2 deletions ckan/controllers/home.py
Expand Up @@ -22,7 +22,8 @@ class HomeController(base.BaseController):
def __before__(self, action, **env):
try:
base.BaseController.__before__(self, action, **env)
context = {'model': model, 'user': c.user or c.author}
context = {'model': model, 'user': c.user or c.author,
'auth_user_obj': c.userobj}
logic.check_access('site_read', context)
except logic.NotAuthorized:
base.abort(401, _('Not authorized to see this page'))
Expand All @@ -43,7 +44,7 @@ def index(self):
try:
# package search
context = {'model': model, 'session': model.Session,
'user': c.user or c.author}
'user': c.user or c.author, 'auth_user_obj': c.userobj}
data_dict = {
'q': '*:*',
'facet.field': g.facets,
Expand Down Expand Up @@ -129,6 +130,7 @@ def db_to_form_schema(group_type=None):
context = {'model': model, 'session': model.Session,
'ignore_auth': True,
'user': c.user or c.author,
'auth_user_obj': c.userobj,
'schema': db_to_form_schema(group_type=group_type),
'limits': {'packages': 2},
'for_view': True}
Expand Down
55 changes: 31 additions & 24 deletions ckan/controllers/package.py
Expand Up @@ -114,7 +114,8 @@ def search(self):
package_type = self._guess_package_type()

try:
context = {'model': model, 'user': c.user or c.author}
context = {'model': model, 'user': c.user or c.author,
'auth_user_obj': c.userobj}
check_access('site_read', context)
except NotAuthorized:
abort(401, _('Not authorized to see this page'))
Expand Down Expand Up @@ -200,7 +201,8 @@ def pager_url(q=None, page=None):
search_extras[param] = value

context = {'model': model, 'session': model.Session,
'user': c.user or c.author, 'for_view': True}
'user': c.user or c.author, 'for_view': True,
'auth_user_obj': c.userobj}

if package_type and package_type != 'dataset':
# Only show datasets of this particular type
Expand Down Expand Up @@ -316,7 +318,8 @@ def read(self, id, format='html'):

package_type = self._get_package_type(id.split('@')[0])
context = {'model': model, 'session': model.Session,
'user': c.user or c.author, 'for_view': True}
'user': c.user or c.author, 'for_view': True,
'auth_user_obj': c.userobj}
data_dict = {'id': id}

# interpret @<revision_id> or @<date> suffix
Expand Down Expand Up @@ -384,7 +387,7 @@ def history(self, id):
h.redirect_to(controller='revision', action='diff', **params)

context = {'model': model, 'session': model.Session,
'user': c.user or c.author}
'user': c.user or c.author, 'auth_user_obj': c.userobj}
data_dict = {'id': id}
try:
c.pkg_dict = get_action('package_show')(context, data_dict)
Expand Down Expand Up @@ -450,7 +453,7 @@ def new(self, data=None, errors=None, error_summary=None):
package_type = self._guess_package_type(True)

context = {'model': model, 'session': model.Session,
'user': c.user or c.author,
'user': c.user or c.author, 'auth_user_obj': c.userobj,
'save': 'save' in request.params}

# Package needs to have a organization group in the call to
Expand Down Expand Up @@ -514,7 +517,7 @@ def resource_edit(self, id, resource_id, data=None, errors=None,

context = {'model': model, 'session': model.Session,
'api_version': 3,
'user': c.user or c.author}
'user': c.user or c.author, 'auth_user_obj': c.userobj}

data['package_id'] = id
try:
Expand All @@ -535,7 +538,7 @@ def resource_edit(self, id, resource_id, data=None, errors=None,

context = {'model': model, 'session': model.Session,
'api_version': 3,
'user': c.user or c.author,}
'user': c.user or c.author, 'auth_user_obj': c.userobj}
pkg_dict = get_action('package_show')(context, {'id': id})
if pkg_dict['state'].startswith('draft'):
# dataset has not yet been fully created
Expand Down Expand Up @@ -579,7 +582,7 @@ def new_resource(self, id, data=None, errors=None, error_summary=None):
del data['id']

context = {'model': model, 'session': model.Session,
'user': c.user or c.author}
'user': c.user or c.author, 'auth_user_obj': c.userobj}

# see if we have any data that we are trying to save
data_provided = False
Expand Down Expand Up @@ -656,7 +659,7 @@ def new_resource(self, id, data=None, errors=None, error_summary=None):
vars['pkg_name'] = id
# get resources for sidebar
context = {'model': model, 'session': model.Session,
'user': c.user or c.author}
'user': c.user or c.author, 'auth_user_obj': c.userobj}
try:
pkg_dict = get_action('package_show')(context, {'id': id})
except NotFound:
Expand All @@ -673,7 +676,7 @@ def new_metadata(self, id, data=None, errors=None, error_summary=None):
''' FIXME: This is a temporary action to allow styling of the
forms. '''
context = {'model': model, 'session': model.Session,
'user': c.user or c.author}
'user': c.user or c.author, 'auth_user_obj': c.userobj}

if request.method == 'POST' and not data:
save_action = request.params.get('save')
Expand Down Expand Up @@ -729,7 +732,7 @@ def new_metadata(self, id, data=None, errors=None, error_summary=None):
def edit(self, id, data=None, errors=None, error_summary=None):
package_type = self._get_package_type(id)
context = {'model': model, 'session': model.Session,
'user': c.user or c.author,
'user': c.user or c.author, 'auth_user_obj': c.userobj,
'save': 'save' in request.params,
'moderated': config.get('moderated'),
'pending': True}
Expand Down Expand Up @@ -797,7 +800,7 @@ def edit(self, id, data=None, errors=None, error_summary=None):
def read_ajax(self, id, revision=None):
package_type = self._get_package_type(id)
context = {'model': model, 'session': model.Session,
'user': c.user or c.author,
'user': c.user or c.author, 'auth_user_obj': c.userobj,
'revision_id': revision}
try:
data = get_action('package_show')(context, {'id': id})
Expand All @@ -814,7 +817,7 @@ def read_ajax(self, id, revision=None):
def history_ajax(self, id):

context = {'model': model, 'session': model.Session,
'user': c.user or c.author}
'user': c.user or c.author, 'auth_user_obj': c.userobj}
data_dict = {'id': id}
try:
pkg_revisions = get_action('package_revision_list')(
Expand Down Expand Up @@ -1020,7 +1023,7 @@ def delete(self, id):
h.redirect_to(controller='package', action='edit', id=id)

context = {'model': model, 'session': model.Session,
'user': c.user or c.author}
'user': c.user or c.author, 'auth_user_obj': c.userobj}

try:
check_access('package_delete', context, {'id': id})
Expand All @@ -1045,7 +1048,7 @@ def resource_delete(self, id, resource_id):
h.redirect_to(controller='package', action='resource_edit', resource_id=resource_id, id=id)

context = {'model': model, 'session': model.Session,
'user': c.user or c.author}
'user': c.user or c.author, 'auth_user_obj': c.userobj}

try:
check_access('package_delete', context, {'id': id})
Expand All @@ -1072,7 +1075,7 @@ def autocomplete(self):
return ''

context = {'model': model, 'session': model.Session,
'user': c.user or c.author}
'user': c.user or c.author, 'auth_user_obj': c.userobj}

data_dict = {'q': q}
packages = get_action('package_autocomplete')(context, data_dict)
Expand Down Expand Up @@ -1128,7 +1131,7 @@ def _update_authz(self, fs):

def resource_read(self, id, resource_id):
context = {'model': model, 'session': model.Session,
'user': c.user or c.author}
'user': c.user or c.author, 'auth_user_obj': c.userobj}

try:
c.resource = get_action('resource_show')(context,
Expand Down Expand Up @@ -1170,7 +1173,7 @@ def resource_download(self, id, resource_id):
against this resource.
"""
context = {'model': model, 'session': model.Session,
'user': c.user or c.author}
'user': c.user or c.author, 'auth_user_obj': c.userobj}

try:
rsc = get_action('resource_show')(context, {'id': resource_id})
Expand All @@ -1188,7 +1191,7 @@ def follow(self, id):
'''Start following this dataset.'''
context = {'model': model,
'session': model.Session,
'user': c.user or c.author}
'user': c.user or c.author, 'auth_user_obj': c.userobj}
data_dict = {'id': id}
try:
get_action('follow_dataset')(context, data_dict)
Expand All @@ -1207,7 +1210,7 @@ def unfollow(self, id):
'''Stop following this dataset.'''
context = {'model': model,
'session': model.Session,
'user': c.user or c.author}
'user': c.user or c.author, 'auth_user_obj': c.userobj}
data_dict = {'id': id}
try:
get_action('unfollow_dataset')(context, data_dict)
Expand All @@ -1225,7 +1228,9 @@ def unfollow(self, id):

def followers(self, id=None):
context = {'model': model, 'session': model.Session,
'user': c.user or c.author, 'for_view': True}
'user': c.user or c.author, 'for_view': True,
'auth_user_obj': c.userobj}

data_dict = {'id': id}
try:
c.pkg_dict = get_action('package_show')(context, data_dict)
Expand All @@ -1245,7 +1250,8 @@ def activity(self, id):
'''Render this package's public activity stream page.'''

context = {'model': model, 'session': model.Session,
'user': c.user or c.author, 'for_view': True}
'user': c.user or c.author, 'for_view': True,
'auth_user_obj': c.userobj}
data_dict = {'id': id}
try:
c.pkg_dict = get_action('package_show')(context, data_dict)
Expand All @@ -1269,7 +1275,7 @@ def resource_embedded_dataviewer(self, id, resource_id,
querystring (as well as accepting them via routes).
"""
context = {'model': model, 'session': model.Session,
'user': c.user or c.author}
'user': c.user or c.author, 'auth_user_obj': c.userobj}

try:
c.resource = get_action('resource_show')(context,
Expand Down Expand Up @@ -1346,7 +1352,8 @@ def resource_datapreview(self, id, resource_id):
context = {
'model': model,
'session': model.Session,
'user': c.user or c.author
'user': c.user or c.author,
'auth_user_obj': c.userobj
}

try:
Expand Down

0 comments on commit 1988837

Please sign in to comment.