48K Views

Symfony الأمن الناخبين

في تطبيق ويب الأمن هو مصدر قلق بالغ ، إذا كان التطبيق الخاص بك لا يكفي لتأمين التي يمكن أن تخلق مشكلة خطيرة. فكيف يمكننا أن نؤكد طلبنا مؤمن ؟ هناك 2 الأمنية تصميم المصادقة والتخويل.

<قوية>المصادقة : المصادقة تتم معالجتها عند استخدام بيانات الاعتماد الخاصة بك (على سبيل المثال. اسم المستخدم وكلمة المرور) إلى تسجيل الدخول إلى النظام.

<قوية>إذن : بعد عملية المصادقة, تطبيق يعرف من أنت. ولكن يمكنك الوصول إلى بعض الموارد من التطبيق أو ليس هو التفويض.

 

 

Symfony عملية الترخيص يقرر ما إذا كان أو لم يكن الحالية يمكن للمستخدم الوصول إلى بعض URI ، أو تعديل كائن معين. هناك 2 طرق (ACL و الناخبين) ، ولكن الناخبين هو الحل الأسهل لتنفيذ هذه القيود.

Symfony الناخبين هو آلية لتوفير الوصول إلى المستخدم الحالي في بعض الموارد. الناخبين هي الطبقة التي تحتوي على isGranted الأسلوب حيث كتبنا منطق الأعمال المعقدة التي تقرر لديك الإذن أو عدم الوصول إلى هذا URI ، أو كائن.

جميع الناخبين يسمى كل مرة كلما دعا isGranted الطريقة ، يمكنك أيضا تمرير كائن إلى isGranted طريقة ثانية الحجة و الجدال سوف تمر إلى الناخبين.

دعونا خلق سيناريو من أجل فهم أفضل من الناخبين ، لنفترض أن هناك تذكرة مع رقم 1000 الذي تم تعيينه وكيل وكيل ب يحاول الوصول إلى هذه التذكرة ولكن وكيل ب لديه الإذن للوصول إلى هذه التذكرة.

لذلك خلق الناخبين للتغلب على هذا الوضع.

 

/**
* Webkul Software.
*
* @category Webkul
* @package Webkul_Uvdesk
* @author Webkul
* @copyright Copyright (c) 2010-2016 Webkul Software Private Limited (https://webkul.com)
* @license https://store.webkul.com/license.html
*/

// Webkul/UvdeskBundle/Controller/TicketController;

class TicketController extends Controller
{
    public function viewAction(Request $request)
    {
        // ...

       $ticket = $this->getDoctrine()->getRepository('UvdeskBundle:Ticket')->find($id);

       $this->denyAccessUnlessGranted('VIEW_TICKET',  $ticket);

       // ...
   }
}

في أعلاه تحكم علينا التحقق ما إذا كان المستخدم الحالي يمكن الوصول إلى هذه التذكرة عن طريق الاتصال denyAccessUnlessGranted طريقة symfony الأساسية تحكم من Symfony\حزمة\FrameworkBundle\تحكم مساحة الاسم. طريقة denyAccessUnlessGranted هو أبسط isGranted الأسلوب الذي يدعو isGranted طريقة إذا كان المستخدم غير مخول ثم يخلق تم رفض الوصول استثناء (403 forbidden).

إنشاء تذكرة الناخبين حيث علينا أن نكتب المنطق تقييد المستخدم من الوصول إلى تذكرة.

 

/**
* Webkul Software.
*
* @category Webkul
* @package Webkul_Uvdesk
* @author Webkul
* @copyright Copyright (c) 2010-2016 Webkul Software Private Limited (https://webkul.com)
* @license https://store.webkul.com/license.html
*/

// Webkul/UvdeskBundle/Security/TicketVoter;
class TicketVoter extends AbstractVoter
{

    private $attributesArray = array('VIEW_TICKET', 'DELETE_TICKET');

    protected function supports($attribute, $subject)
    {
        // check if attribute is supportive
        if (!in_array($attribute, $attributesArray) {
            return false;
        }

        // Vote on Ticket object
        if (!$subject instanceof Ticket) {
            return false;
        }

        return true;
    }

    protected function getSupportedClasses()
    {
        return array('Webkul\UvdeskBundle\Entity\Ticket');
    }

    protected function getSupportedAttributes()
    {
        return $this->attributesArray;
    } 

    protected function isGranted($attribute, $ticket, $user = null) { 
       $user = $token->getUser(); 
       if (!$user instanceof User) { 
          return false; 
       } 

       switch ($attribute) { 
          case 'VIEW_TICKET': 
             if($user->getRole() == 'ROLE_ADMIN' || $user == $ticket->getAgent()) 
                return true; 
             return false; 
          case 'DELETE_TICKET': 
             if($user->getRole() == 'ROLE_ADMIN') 
                return true; 
             return false; 
       } 
   } 
}

 

في isGranted طريقة نعود صحيح إذا كان المستخدم لديه الوصول إلى false إذا لم يكن.

لصنع هذا الناخبين العمل, تحتاج إلى تكوين هذا الناخبين في الخدمة الخاصة بك.yml. أدناه هو رمز التكوين من الناخبين:

 

# Resources/config/services.yml
services:
   uvdesk.ticket_voter:
        class: Uvdesk\Security\TicketVoter
        tags:
            - { name: security.voter }

 

هذا هو. يمكنك كتابة الأعمال التجارية الخاصة بك المنطق على أساس الحاجة.

يمكنك أيضا التحقق من Symfony الناخبين على symfony وثائق http://symfony.com/doc/current/security/voters.html

شكرا على وقتك.

Category(s) uvdesk
. . .

Comment

Add Your Comment

Be the first to comment.

css.php