2014-10-07 56 views
0

我在我的XAF項目中使用了新的安全系統。我創建了自定義安全類「ExtendedSystemSecurityRole」和「SecuritySystemUser」。在Updater類中,我創建了一個名爲「G1」的角色及其權限,如下所示。但是在運行時,用戶「John」無法看到「Buyer」表單。Devexpress XAF新安全系統 - 「SecuritySystemObjectPermissionsObject」中的條件

ExtendedSecuritySystemRole basicUserRole = ObjectSpace.FindObject<ExtendedSecuritySystemRole>(new BinaryOperator("Name", "G1")); 
     if (basicUserRole == null)    
     { 
      basicUserRole = ObjectSpace.CreateObject<ExtendedSecuritySystemRole>(); 
      basicUserRole.Name = "G1"; 
      SecuritySystemTypePermissionObject userTypePermission = 
       ObjectSpace.CreateObject<SecuritySystemTypePermissionObject>(); 
      userTypePermission.TargetType = typeof(Buyer); 
      SecuritySystemObjectPermissionsObject currentUserObjectPermission = 
       ObjectSpace.CreateObject<SecuritySystemObjectPermissionsObject>(); 

      currentUserObjectPermission.Criteria = "[Active] = True"; 
      currentUserObjectPermission.AllowNavigate = true; 
      currentUserObjectPermission.AllowRead = true; 
      userTypePermission.ObjectPermissions.Add(currentUserObjectPermission); 
      basicUserRole.TypePermissions.Add(userTypePermission); 
     } 
     ExtendedSecuritySystemUser userJohn = 
      ObjectSpace.FindObject<ExtendedSecuritySystemUser>(
      new BinaryOperator("UserName", "John")); 
     if (userJohn == null) 
     { 
      userJohn = ObjectSpace.CreateObject<ExtendedSecuritySystemUser>(); 
      userJohn.UserName = "John"; 
      userJohn.SetPassword(""); 
      userJohn.Roles.Add(basicUserRole); 
     } 
+1

您是否忘記使userJohn處於活動狀態?如果您刪除標準,它會起作用嗎? DevExpress支持的最佳位置是[支持中心](https://www.devexpress.com/Support/Center/)。 – shamp00 2014-10-08 08:42:06

+0

「John」已激活。是的,它沒有標準。 DevExpress支持中心僅向註冊用戶提供答案(具有有效許可證)。 – Armando 2014-10-08 16:37:15

回答

0

您的標準是說Buyer.Active = True而不是ExtendedSecuritySystemUser.Active = true

可能create your own function operatorIsCurrentUserActive()

這將是簡單的使用了這個ViewController。例如:

public class InactiveUsersController : ViewController 
{ 
    public InactiveUsersController() 
    { 
     this.TargetViewNesting = Nesting.Any; 
     this.TargetViewType = ViewType.ListView; 
     this.TargetObjectType = typeof(Buyer); 
    } 

    protected override void OnActivated() 
    { 
     base.OnActivated(); 
     ListView listView = View as ListView; 
     listView.CollectionSource.Criteria.Remove("InactiveUserFilter"); // clear the filter 

     var currentUser = SecuritySystem.CurrentUser as ExtendedSecuritySystemUser; 
     if (!currentUser.Active) 
     { 
      // return empty list if user is inactive 
      listView.CollectionSource.Criteria.Add("InactiveUserFilter", CollectionSource.EmptyCollectionCriteria); 
     } 
    } 
} 
+0

謝謝你的回答。但是我需要做的是與ExtendedSecuritySystemUser無關。我只想讓安全系統理解標準,不管我寫什麼。如果我想過濾買方類型,我會使用它的屬性,如[Active]或其他。但問題是安全系統不會拋出任何異常,並且不顯示任何合理的輸出。 – Armando 2014-10-08 19:07:39

+0

哪個對象具有「活動」屬性?買方還是用戶?目前,您的標準似乎正在返回零行。您可以使用與'XPCollection'相同的條件語法來檢查結果集。 – shamp00 2014-10-08 20:54:45

+0

買方擁有「有效」財產。 – Armando 2014-10-09 08:10:22