Ejemplo n.º 1
0
def buttonItem(request, operation): #根据一项操作产生操作菜单项!!!
	if hasPerm(request.user, request.model, operation):
		return u'<li><a href="%s/data/%s/">%s</a></li>'%(iclock_url_rel, model.__name__, model._meta.verbose_name)
	else:
		return u'<li>'+model._meta.verbose_name+'</li>'
Ejemplo n.º 2
0
def getUsrCreateFrameOptions(dataModel,request):
    '''
    return options , actions
    '''
    from urls import get_model_data_url
    import base
    lng=get_language()
    
    model_name=dataModel.__name__
    
    #**********options cache********
    cache_key=u"%s_%s_%s"%(lng,model_name,'options')
    options=cache.get(cache_key)
    if not options:
        options={
                #"canEdit": (not hasattr(dataModel.Admin, 'read_only')) or not dataModel.Admin.read_only,
                "key_field":dataModel._meta.pk.name,
                "title":u"%s"%dataModel._meta.verbose_name,
                "addition_fields":[], 
                "addition_columns":[],
                "exception_fields":[],
                "model": model_name,
                #"model_url":get_model_data_url(dataModel),
                "app_label": dataModel._meta.app_label,
                "children_models": {},
                "detail_model":hasattr(dataModel.Admin, "detail_model") and [ m for m in dataModel.Admin.detail_model] or [],
                "parent_models":dict([(f.rel.to.__name__,f.name) for f in dataModel._meta.fields if isinstance(f,models.fields.related.ForeignKey)]),
                
        }
        
        if options["detail_model"]:
            all_related_objects = dataModel._meta.get_all_related_objects()
            for r in all_related_objects:
                child_fk_field = hasattr(r.model.Admin, 'child_fk_field') and r.model.Admin.child_fk_field or ''#只需要从表中存在多个对于主表的外键时配置。不配置取默认
                if child_fk_field and r.field.name != child_fk_field:#去掉不合要求的多余的对象(如video_linkageio__id)
                    all_related_objects.remove(r)
                
            options["children_models"] = dict([(r.name, [r.model._meta.app_label, r.model.__name__,\
                                                         u"%s"%r.model._meta.verbose_name, r.field.name\
                                                         ]) for r in all_related_objects\
                                              ])
        
        
        hide_fields=hasattr(dataModel.Admin, 'hide_fields') and list(dataModel.Admin.hide_fields) or[]
        if hide_fields:
            options["disable_cols"]=hide_fields
        
        if hasattr(dataModel.Admin,"sort_fields"):
            options["sort_fields"]=dataModel.Admin.sort_fields
        if hasattr(dataModel.Admin,"photo_path"):
            options["photo_path"]=dataModel.Admin.photo_path
        if hasattr(dataModel.Admin,"photo_path_tran"):
            options["photo_path_tran"]=dataModel.Admin.photo_path_tran
            
        if hasattr(dataModel.Admin,"layout_types"):
            options["layout_types"]=dataModel.Admin.layout_types
        cache.set(cache_key,options,60*60*24*7)
        
        
    #*******actions cache*******
    usr = threadlocals.get_current_user()
    cache_key = u"%s_%s_%s_%s"%(lng,usr.username,model_name,"actions")
    actions = cache.get(cache_key)
    if not actions:
        if hasattr(dataModel,"get_all_operation_js"):
                actions=dataModel.get_all_operation_js(request.user)
        elif hasattr(dataModel.Admin, "read_only") and not dataModel.Admin.read_only:
                from dbapp.data_utils import hasPerm
                actions={}
                if hasPerm(request.user,dataModel,"add"):
                    actions["_add"]={
                                "verbose_name":u"%(name)s"%{"name":_(u"新增")},
                                "help_text":u"%(name)s"%{"name":_(u"新增记录")},
                                "confirm":"",
                                "params":0,
                                "for_model":True,
                                "only_one":False,
                                }
                if ( hasPerm(request.user,dataModel,"delete") and model_name=="User" ) \
                    or ( hasPerm(request.user,dataModel,"groupdel") and model_name=="Group"):
                    actions["_delete"]={
                                "verbose_name":u"%(name)s"%{"name":_(u"删除")},
                                "help_text":u"%(name)s"%{"name":_(u"删除选定记录")},
                                "confirm":"are you sure?",
                                "params":0,
                                "for_model":False,
                                "only_one":False,
                                "for_select":True
                                }
                                
                if hasPerm(request.user,dataModel,"change"):
                    actions["_change"]={
                                "verbose_name":u"%(name)s"%{"name":_(u"修改")},
                                "help_text": u"%(name)s"%{"name":_(u"修改选定记录")},
                                "params":0,
                                "for_model":False,
                                "only_one":True,
                                "for_select":True
                                }
                actions =smart_str(simplejson.dumps(actions))
        cache.set(cache_key,actions,60*60*24*7)
    return (simplejson.dumps(options),actions or '{"op":"null"}')
Ejemplo n.º 3
0
def reqHasPerm(request, operation): #判断一个当前请求的数据模型表是否有某个权限
	return hasPerm(request.user, request.model, operation)
Ejemplo n.º 4
0
def getUsrCreateFrameOptions(dataModel, request):
    '''
    return options , actions
    '''
    from urls import get_model_data_url
    import base
    lng = get_language()

    model_name = dataModel.__name__

    #**********options cache********
    cache_key = u"%s_%s_%s" % (lng, model_name, 'options')
    options = cache.get(cache_key)
    if not options:
        options = {
            #"canEdit": (not hasattr(dataModel.Admin, 'read_only')) or not dataModel.Admin.read_only,
            "key_field":
            dataModel._meta.pk.name,
            "title":
            u"%s" % dataModel._meta.verbose_name,
            "addition_fields": [],
            "addition_columns": [],
            "exception_fields": [],
            "model":
            model_name,
            #"model_url":get_model_data_url(dataModel),
            "app_label":
            dataModel._meta.app_label,
            "children_models": {},
            "detail_model":
            hasattr(dataModel.Admin, "detail_model")
            and [m for m in dataModel.Admin.detail_model] or [],
            "parent_models":
            dict([(f.rel.to.__name__, f.name) for f in dataModel._meta.fields
                  if isinstance(f, models.fields.related.ForeignKey)]),
        }

        if options["detail_model"]:
            all_related_objects = dataModel._meta.get_all_related_objects()
            for r in all_related_objects:
                child_fk_field = hasattr(
                    r.model.Admin, 'child_fk_field'
                ) and r.model.Admin.child_fk_field or ''  #只需要从表中存在多个对于主表的外键时配置。不配置取默认
                if child_fk_field and r.field.name != child_fk_field:  #去掉不合要求的多余的对象(如video_linkageio__id)
                    all_related_objects.remove(r)

            options["children_models"] = dict([(r.name, [r.model._meta.app_label, r.model.__name__,\
                                                         u"%s"%r.model._meta.verbose_name, r.field.name\
                                                         ]) for r in all_related_objects\
                                              ])

        hide_fields = hasattr(dataModel.Admin, 'hide_fields') and list(
            dataModel.Admin.hide_fields) or []
        if hide_fields:
            options["disable_cols"] = hide_fields

        if hasattr(dataModel.Admin, "sort_fields"):
            options["sort_fields"] = dataModel.Admin.sort_fields
        if hasattr(dataModel.Admin, "photo_path"):
            options["photo_path"] = dataModel.Admin.photo_path
        if hasattr(dataModel.Admin, "photo_path_tran"):
            options["photo_path_tran"] = dataModel.Admin.photo_path_tran

        if hasattr(dataModel.Admin, "layout_types"):
            options["layout_types"] = dataModel.Admin.layout_types
        cache.set(cache_key, options, 60 * 60 * 24 * 7)

    #*******actions cache*******
    usr = threadlocals.get_current_user()
    cache_key = u"%s_%s_%s_%s" % (lng, usr.username, model_name, "actions")
    actions = cache.get(cache_key)
    if not actions:
        if hasattr(dataModel, "get_all_operation_js"):
            actions = dataModel.get_all_operation_js(request.user)
        elif hasattr(dataModel.Admin,
                     "read_only") and not dataModel.Admin.read_only:
            from dbapp.data_utils import hasPerm
            actions = {}
            if hasPerm(request.user, dataModel, "add"):
                actions["_add"] = {
                    "verbose_name": u"%(name)s" % {
                        "name": _(u"新增")
                    },
                    "help_text": u"%(name)s" % {
                        "name": _(u"新增记录")
                    },
                    "confirm": "",
                    "params": 0,
                    "for_model": True,
                    "only_one": False,
                }
            if ( hasPerm(request.user,dataModel,"delete") and model_name=="User" ) \
                or ( hasPerm(request.user,dataModel,"groupdel") and model_name=="Group"):
                actions["_delete"] = {
                    "verbose_name": u"%(name)s" % {
                        "name": _(u"删除")
                    },
                    "help_text": u"%(name)s" % {
                        "name": _(u"删除选定记录")
                    },
                    "confirm": "are you sure?",
                    "params": 0,
                    "for_model": False,
                    "only_one": False,
                    "for_select": True
                }

            if hasPerm(request.user, dataModel, "change"):
                actions["_change"] = {
                    "verbose_name": u"%(name)s" % {
                        "name": _(u"修改")
                    },
                    "help_text": u"%(name)s" % {
                        "name": _(u"修改选定记录")
                    },
                    "params": 0,
                    "for_model": False,
                    "only_one": True,
                    "for_select": True
                }
            actions = smart_str(simplejson.dumps(actions))
        cache.set(cache_key, actions, 60 * 60 * 24 * 7)
    return (simplejson.dumps(options), actions or '{"op":"null"}')