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 @@