2013-06-13 8 views
8

मेरा एप्लिकेशन इन परियोजनाओं को संपादित करने के लिए परियोजनाओं, परियोजना विवरण पृष्ठों और रूपों की एक सूची दिखाता है। ये मार्ग हैं: - परियोजनाओं की सूची Symfony2: अनुमतियों के आधार पर ट्विग में लिंक कैसे छिपाएं

  • /परियोजना/42 - दृश्य परियोजना (परियोजना विवरण पृष्ठ)
  • /परियोजना/42/संपादित करें -

    • /संपादन परियोजना

    केवल इसका मालिक एक परियोजना को संपादित कर सकता है।

    मैंने गैर-मालिकों के लिए/परियोजना/42/संपादन को रोकने के लिए एक मतदाता लागू किया है।

    अब, मैं परियोजना विवरण पृष्ठ से लिंक "संपादन परियोजना" लिंक भी छिपाना चाहता हूं। ऐसा करने का तरीका क्या होगा? आदर्श रूप में, टहनी में, मैं की तरह

     
    {% if may_access(path('project_edit', { 'id': project.id })) %} 
        <a href="{{ path('project_edit', { 'id': project.id }) }}">edit project</a> 
    {% endif %} 
    

    कुछ करने के लिए मैं एक टहनी विस्तार के रूप में इस समारोह को लागू कर सकते चाहते हैं, लेकिन शायद एक इसी तरह की सुविधा पहले से मौजूद है।

  • उत्तर

    10

    समारोह is_granted() वास्तव में has a second parameter कि मैं क्या जरूरत है मुझे सिर्फ ऐसा करने के लिए अनुमति देता है:

     
    public function editAction(Project $project) 
    { 
        if (!$this->get('security.context')->isGranted('MAY_EDIT', $project)) { 
         $this->flash('You are not allowed to edit this project'); 
         return $this->show($project); 
        } 
        // ... 
    } 
    

    यह वह जगह है:

     
    {% if is_granted("MAY_EDIT", project) %} 
        <a href="{{ path('project_edit', { 'id': project.id }) }}">edit project</a> 
    {% endif %} 
    

    मैं नियंत्रक कार्रवाई में एक चेक के साथ संयोजन में इस का उपयोग वास्तव में के दृष्टिकोण के समान Sonata User - Security on custom field के उत्तर में उपयोग किया जाता है। मैं उम्मीद कर रहा था कि मतदाता को स्वचालित रूप से बुलाया जाए और कॉल से बचें।()।

    यदि आप पूर्ण कोड को देखना चाहते हैं, तो यह ट्यूटोरियल प्रोजेक्ट में है जिसमें मेरे पास published in github है।

    +2

    कृपया सलाह दीजिये, कोई भी हैक यूआरएल कर सकता है। सुनिश्चित करें कि आपके नियंत्रक के पास उचित रीडायरेक्ट भी हैं। – Lighthart

    +0

    अच्छा काम। ध्यान देने योग्य एक बात, अगर '$ यह-> शो ($ प्रोजेक्ट); 'केवल प्रोजेक्ट पेज (/ प्रोजेक्ट/42) के समान दृश्य लौट रहा है। शायद उस मार्ग पर 302 रीडायरेक्ट का उपयोग करना सबसे अच्छा होगा। – Paulpro

    +0

    आह, क्षमा करें, मेरा $ यह-> शो ($ प्रोजेक्ट) वास्तव में केवल एक छोटा सा सहायक है जो $-> रीडायरेक्ट ($ this-> generUrl ('project_show', array ('id' => $ project- > getId()))); – Olav

    संबंधित मुद्दे