zoukankan      html  css  js  c++  java
  • 在xaf 14 中实现 Tonyyang原文中的action权限

    具体实现过程,主要修改了以下几个地方:

    第一:角色和用户类中需要修改成SecurityStrategy的方式:

    具体代码

    MySecurityRole:
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Security;
    using System.Text;
    using DevExpress.ExpressApp.Security.Strategy;
    using DevExpress.Xpo;
    using DevExpress.Persistent.Base;
    using DevExpress.Persistent.Validation;
    using System.Collections.ObjectModel;
    using DevExpress.Persistent.Base.Security;
    namespace SecurityDemoTest.Module.BusinessObjects
    {
        [DefaultClassOptions]
        public class MySecurityRole : SecuritySystemRole
        {
            public const string DefaultAdministratorsGroupName = "Administrators";
            //private List<IPermission> _Permissions = new List<IPermission>();
            public MySecurityRole(Session session)
                : base(session)
            {
    
            }
    
            [Association("ActionDatas-MySecurityRoles")]
            public XPCollection<ActionData> ActionPermissions
            {
                get
                {
                    return GetCollection<ActionData>("ActionPermissions");
                }
            }
        }
    }
    

      MySecurityUser:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    //using DevExpress.ExpressApp.Security;
    using System.Drawing;
    using System.Security;
    using DevExpress.ExpressApp.Security.Strategy;
    using DevExpress.Persistent.Validation;
    using DevExpress.Xpo;
    using DevExpress.Persistent.Base;
    using DevExpress.Persistent.Base.General;
    using DevExpress.Persistent.Base.Security;
    using DevExpress.ExpressApp.DC;
    using System.ComponentModel;
    //using WinWebSolution.Module;
    
    
    namespace SecurityDemoTest.Module.BusinessObjects
    {
        [XafDisplayName("User"), Persistent, ImageName("BO_User")]
        public class MySecurityUser : SecuritySystemUser // SecurityUserWithRolesBase
        {
            public MySecurityUser(DevExpress.Xpo.Session session)
                : base(session)   
            {
                //_Permissions = new List<IPermission>();
            }
            
            [Persistent("Color")]
            private int _Color;
            [NonPersistent]
            public Color Color
            {
                get { return Color.FromArgb(_Color); }
                set { SetPropertyValue("Color", ref _Color, value.ToArgb()); }
            }
            public override void AfterConstruction()
            {
                base.AfterConstruction();
                _Color = Color.White.ToArgb();
            }
            private string _Description;
            public string Description
            {
                get
                {
                    return _Description;
                }
                set
                {
                    SetPropertyValue("Description", ref _Description, value);
                }
            }
    
    
        }
    }
    

      第二:需要在ViewController中添加如下代码:

            private static bool IsAllowAccessAction(string actionId)
            {
                MySecurityUser currentUser = SecuritySystem.CurrentUser as MySecurityUser;
                Guard.ArgumentNotNull(currentUser, "CurrentUser");
                Guard.ArgumentNotNullOrEmpty(actionId, "ActionId");
                foreach (MySecurityRole role in currentUser.Roles)
                {
                    foreach (ActionData ap in role.ActionPermissions)
                    {
                        if (ap.ActionId == actionId && ap.Kind == "Custom")
                            return true;
                    }
                }
                return false;
            }
  • 相关阅读:
    HDU-3336-Count the string(扩展KMP)
    洛谷-P3805-Manacher模板
    洛谷-p5410-扩展KMP模板
    HDU-2594-Simpsons' Hidden Talents(kmp, 扩展kmp)
    POJ-3080-Blue jeans(KMP, 暴力)
    [办公应用]两个单独的列数据快速变为两列匹配关联数据
    [办公应用]如何将单词中的部分字母加下划线
    [办公应用]word 2007:全屏快捷键,让复制图片保持原样大小(office 全屏快捷键)
    [办公自动化]如何让excel图表标签中显示最新值数据
    [计算机故障处理]无法访问网络共享资源
  • 原文地址:https://www.cnblogs.com/ddlzq/p/3924565.html
Copyright © 2011-2022 走看看