جافا - Ibatis - الخلية مع سؤال الحيوي على أساس دور

StackOverflow https://stackoverflow.com/questions/463295

  •  19-08-2019
  •  | 
  •  

سؤال

وأنا باستخدام جافا - Ibatis والخلية مع فليكس / فلاش على الواجهة الأمامية. لدي شرط واحد هو أن تكون قادرة على إضافة creterias والجدول حيوي لطلب تبعا لدور المستخدم. هنا مثال

ونفس الكائن يدعو نفسه SQL ولكن نتيجة مختلفة استنادا إلى دور

ودور 1: الوصول بشكل كامل للموظفين

SELECT * 
  FROM Employee A

ودور 2: محدود الوصول إلى الموظفين

SELECT * 
 FROM Employee A
    , SECURE_LIST B
WHERE B.EmployeeID = A.EmployeeID
  AND B.ROLE_ID = 'ROLE'

وأنا يمكن أن تستخدم الحيوي SQL

    SELECT * 
     FROM Employee A
<isNotEmpty property="ROLE" >
        , SECURE_LIST B
    WHERE B.EmployeeID = A.EmployeeID
      AND B.ROLE_ID = #ROLE#
</isNotEmpty>

وأفكار أخرى؟

هل كانت مفيدة؟

المحلول

SELECT *      
FROM Employee A
<isNotEmpty property="ROLE" >
   inner join SECURE_LIST B on B.EmployeeID = A.EmployeeID
</isNotEmpty>
<dynamic prepend="WHERE">
      <isNotEmpty property="ROLE" prepend="AND">
           B.ROLE_ID = #ROLE#
      </isNotEmpty>
</dynamic>

وأسهل قليلا من إنشاء DAOs لكن لا تزال تقدم لك المرونة لإضافة ينضم البعض أو غيرها حيث العناصر بند دون الحاجة لتشمل دور في كل خريطة المعلمة

نصائح أخرى

والمشكلة مع استخدام دور داخل الاستعلام هو أن لديك لثم مدها كحجة إلى الاستعلام عن ربما كل الاستعلام. ماذا يحدث عندما تحتاج إلى توفير الحجج إلى الاستعلام؟ سوف تحتاج إلى إضافة دور لتلك الفئات المعلمة / خرائط جدا. انها الفوضى كل قليلا.

وكنت تأخذ خطوة إلى الوراء وتحديد DAO الخاص بك:

public interface MyDAO {
  List<Employee> getEmployees();
  ...
}

وثم إنشاء اثنين من التطبيقات:

public class MyDAOSuper implements MyDAO {
  public List<Employee> getEmployees() {
    // call a query using your first SQL
  }
}

public class MyDAOLimited implements MyDAO {
  public List<Employee> getEmployees() {
    // limited version
  }
}

وميزة واحدة لهذا النهج هو أنه إذا كان لا ينبغي أن تستخدم أساليب معينة من دور معين لديك خيار رمي بعض استثناء انتهاك الأمن.

والآن كيف قمت بتوصيل أن في لبقية التطبيق الخاص بك هو شيء أنا لم يكن لديك ما يكفي من التفاصيل في التعليق عليها. قد يكون استخدام BlazeDS في هذه الحالة كنت تشير الى استخدام التكامل الربيع مع BlazeDS ، التي سوف تفتح حقن التبعية كخيار.

وبدلا من ذلك يمكن استخدام أسلوب مصنع بسيط (على أساس دور) للحصول على DAO الصحيح.

وهناك شك في وسائل أخرى للسد هذا في اعتمادا على التكوين الخاص بك. وأعتقد أن ما سبق هو أنظف بكثير من ما كنت اقتراح بالرغم من ذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top