• 在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;
            }
  • 相关阅读:
    axis2学习笔记
    一个奇怪的数组越界报错
    zk实现分布式锁
    springBoot配置双数据源
    oracle查询
    maven项目打包
    linux修改yum源为阿里云
    kafka入门
    大话设计模式读书笔记(中介者模式)
    大话设计模式读书笔记(职责链模式)
  • 原文地址:https://www.cnblogs.com/ddlzq/p/3924565.html
Copyright © 2020-2023  润新知