diff --git a/demo/apps/tables/settings.ini b/demo/apps/tables/settings.ini new file mode 100644 index 0000000..9ef7bb7 --- /dev/null +++ b/demo/apps/tables/settings.ini @@ -0,0 +1,36 @@ +[APIJSON_TABLES] +moment = { + "editable" : "auto", + "table_fields" : [ + {"title":"#","key":"id","width":80}, + {"title":"User id","key":"user_id","width":100}, + {"title":"Date","key":"date","width":160}, + {"title":"Content","key":"content"}, + ], + "viewedit_fields" : [ + {"title":"#","key":"id","editable":False}, + {"title":"User id","key":"user_id"}, + {"title":"Date","key":"date","editable":False}, + {"title":"Content","key":"content","type":"textarea"}, + ], +} + +comment = { + "editable" : "auto", + "table_fields" : [ + {"title":"#","key":"id","width":80}, + {"title":"User id","key":"user_id","width":100}, + {"title":"To id","key":"to_id","width":100}, + {"title":"Moment id","key":"moment_id","width":100}, + {"title":"Date","key":"date","width":160}, + {"title":"Content","key":"content"}, + ], + "viewedit_fields" : [ + {"title":"#","key":"id","editable":False}, + {"title":"User id","key":"user_id"}, + {"title":"To id","key":"to_id","editable":False}, + {"title":"Moment id","key":"moment_id","editable":False}, + {"title":"Date","key":"date","editable":False}, + {"title":"Content","key":"content","type":"textarea"}, + ], +} diff --git a/demo/apps/tables/templates/Tables/list.html b/demo/apps/tables/templates/Tables/list.html index 510663a..3b30919 100644 --- a/demo/apps/tables/templates/Tables/list.html +++ b/demo/apps/tables/templates/Tables/list.html @@ -10,7 +10,7 @@
- +
@@ -21,7 +21,8 @@ delimiters: ['{', '}'], data:{ tab_current: null, - tabs: {{=table_keys_json}} + tabs: {{=table_keys_json}}, + apijson_tables: {{=apijson_tables_json}} } }) diff --git a/demo/apps/tables/views.py b/demo/apps/tables/views.py index 1aa5f8d..095b181 100644 --- a/demo/apps/tables/views.py +++ b/demo/apps/tables/views.py @@ -1,19 +1,21 @@ #coding=utf-8 from uliweb import expose, functions -from json import dumps @expose('/tables') class Tables(object): @expose('') def list(self): table_keys = settings.APIJSON_MODELS.keys() - if request.user and functions.has_role(request.user,"ADMIN"): - role = "ADMIN" - elif request.user: - role = "LOGIN" + if request.user: + if functions.has_role(request.user,"ADMIN"): + role = "ADMIN" + else: + role = "OWNER" else: role = "UNKNOWN" + apijson_tables = functions.get_apijson_tables(role) return { - "table_keys_json":dumps(table_keys), - "role":role + "table_keys_json":json_dumps(table_keys), + "apijson_tables_json":json_dumps(apijson_tables), + "role":role, } diff --git a/uliweb_apijson/apijson/__init__.py b/uliweb_apijson/apijson/__init__.py index e69de29..130a65a 100644 --- a/uliweb_apijson/apijson/__init__.py +++ b/uliweb_apijson/apijson/__init__.py @@ -0,0 +1,17 @@ +#coding=utf-8 + +def get_apijson_tables(role="UNKNOWN"): + from uliweb import settings + apijson_tables = dict(settings.APIJSON_TABLES.iteritems()) + for n in apijson_tables: + c = apijson_tables[n] + editable = c["editable"] + if editable=="auto": + editable = False + POST = settings.APIJSON_MODELS[n]["POST"] + if POST: + roles = POST["roles"] + if roles: + editable = role in roles + c["editable"] = editable + return apijson_tables diff --git a/uliweb_apijson/apijson/settings.ini b/uliweb_apijson/apijson/settings.ini index badc16c..d15caa2 100644 --- a/uliweb_apijson/apijson/settings.ini +++ b/uliweb_apijson/apijson/settings.ini @@ -16,3 +16,6 @@ user = { "PUT" : { "roles" : ["ADMIN","OWNER"] }, "DELETE" : { "roles" : ["ADMIN","OWNER"] }, } + +[FUNCTIONS] +get_apijson_tables = "uliweb_apijson.apijson.get_apijson_tables" diff --git a/uliweb_apijson/apijson/templates/vue/inc_apijson_table.html b/uliweb_apijson/apijson/templates/vue/inc_apijson_table.html index 2ed75a6..a7c1531 100644 --- a/uliweb_apijson/apijson/templates/vue/inc_apijson_table.html +++ b/uliweb_apijson/apijson/templates/vue/inc_apijson_table.html @@ -1,15 +1,19 @@