惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

C
Cisco Blogs
Cyberwarzone
Cyberwarzone
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
SecWiki News
SecWiki News
Martin Fowler
Martin Fowler
T
Tor Project blog
N
Netflix TechBlog - Medium
C
Cybersecurity and Infrastructure Security Agency CISA
V
Vulnerabilities – Threatpost
V
Visual Studio Blog
GbyAI
GbyAI
PCI Perspectives
PCI Perspectives
D
DataBreaches.Net
Jina AI
Jina AI
H
Heimdal Security Blog
云风的 BLOG
云风的 BLOG
P
Privacy International News Feed
A
About on SuperTechFans
J
Java Code Geeks
美团技术团队
H
Hackread – Cybersecurity News, Data Breaches, AI and More
N
News | PayPal Newsroom
有赞技术团队
有赞技术团队
MyScale Blog
MyScale Blog
博客园 - 司徒正美
C
Check Point Blog
T
Threat Research - Cisco Blogs
Attack and Defense Labs
Attack and Defense Labs
宝玉的分享
宝玉的分享
AI
AI
Simon Willison's Weblog
Simon Willison's Weblog
C
Cyber Attacks, Cyber Crime and Cyber Security
I
Intezer
P
Proofpoint News Feed
Blog — PlanetScale
Blog — PlanetScale
Apple Machine Learning Research
Apple Machine Learning Research
Hugging Face - Blog
Hugging Face - Blog
The Last Watchdog
The Last Watchdog
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Vercel News
Vercel News
I
InfoQ
阮一峰的网络日志
阮一峰的网络日志
Cisco Talos Blog
Cisco Talos Blog
W
WeLiveSecurity
Hacker News: Ask HN
Hacker News: Ask HN
Recent Commits to openclaw:main
Recent Commits to openclaw:main
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
D
Docker
博客园 - Franky
Security Archives - TechRepublic
Security Archives - TechRepublic

博客园 - 水如烟(LzmTW)

.NET的变量在代码集中是不安全的 HOW TO:获取硬盘物理序列号(VB.NET) 一个创建快捷方式类 认识一下Attribute HOW TO:端口打印(比较粗糙) 标记法定义和创建数据库(四) 标记法定义和创建数据库 Sql2005数据类型与Framework类型的对应关系 HOW TO:重启程序(WinForm) HOW TO:设置默认打印机 HOW TO:避免“将COM对象与其基础RCW分开后不能再使用该对象”错误 HOW TO:控制是否允许用户退出ExcelApplication的Workbook 树和自联表(五) 树和自联表(六) 树和自联表(四) 树和自联表(一) 行政区划数据数据库的设计(脚本) 行政区划数据数据库的设计(七) 行政区划数据数据库的设计(六)
一个简单的CodeAccessPermission生成器
水如烟(LzmTW) · 2007-02-07 · via 博客园 - 水如烟(LzmTW)

Author:水如烟

界面:

在运行环境CAP目录下生成四个文件:
BillPermission.vb
BillPermissionAttribute.vb
BillPermissionFlags.vb
XMLUtil.vb(属公用)

内容分别如下:
BillPermission.vb

Imports System.Security
Imports System.Security.Permissions
Namespace LzmTW.uSystem.uSecurity
    
<Serializable()> _
    
Public NotInheritable Class BillPermission
        
Inherits CodeAccessPermission
        
Implements IUnrestrictedPermission
        
Private gFlags As BillPermissionFlagsPublic Property Flags() As BillPermissionFlags
            
Get
                
Return Me.gFlags
            
End Get
            
Set(ByVal value As BillPermissionFlags)
                VerifyFlags(value)
                
Me.gFlags = value
            
End Set
        
End PropertySub New(ByVal state As PermissionState)
            
If state = PermissionState.Unrestricted Then
                
Me.SetUnrestricted(True)
            
Else
                
If (state <> PermissionState.None) Then
                    
Throw New ArgumentException("state")
                
End If
                
Me.SetUnrestricted(False)
                
Me.Reset()
            
End If
        
End SubSub New(ByVal flags As BillPermissionFlags)
            VerifyFlags(flags)
            
Me.gFlags = flags
        
End SubPrivate Sub SetUnrestricted(ByVal unrestricted As Boolean)
            
If unrestricted Then
                
Me.gFlags = BillPermissionFlags.AllFlags
            
End If
        
End SubPrivate Sub Reset()
            
Me.gFlags = BillPermissionFlags.NoFlags
        
End SubFriend Function VerifyType(ByVal perm As CodeAccessPermission) As Boolean
            
If Not perm Is Nothing AndAlso perm.GetType Is MyBase.GetType Then
                
Return True
            
End IfReturn False
        
End FunctionFriend Shared Sub VerifyFlags(ByVal flags As BillPermissionFlags)
            
If ((flags And Not BillPermissionFlags.AllFlags) <> BillPermissionFlags.NoFlags) Then
                
Throw New ArgumentException("flags")
            
End If
        
End SubPublic Function IsUnrestricted() As Boolean Implements IUnrestrictedPermission.IsUnrestricted
            
Return Me.gFlags = BillPermissionFlags.AllFlags
        
End FunctionPublic Overrides Function Copy() As IPermission
            
Return New BillPermission(Me.gFlags)
        
End FunctionPublic Overrides Sub FromXml(ByVal element As SecurityElement)
            XMLUtil.ValidateElement(element)
If XMLUtil.IsUnrestricted(element) Then
                
Me.SetUnrestricted(True)
            
Else
                
Me.gFlags = BillPermissionFlags.NoFlagsDim strFlags As String = element.Attribute("Flags")
                
If Not strFlags Is Nothing Then
                    
Me.gFlags = DirectCast([Enum].Parse(GetType(BillPermissionFlags), strFlags), BillPermissionFlags)
                
End If
            
End If
        
End SubPublic Overrides Function Intersect(ByVal target As IPermission) As IPermission
            
If target Is Nothing Then
                
Return Nothing
            
End IfIf Not VerifyType(CType(target, CodeAccessPermission)) Then
                
Throw New ArgumentException("WrongType")
            
End IfDim mPermission As BillPermission = DirectCast(target, BillPermission)
            
Dim mFlags As BillPermissionFlags = Me.gFlags And mPermission.FlagsIf mFlags = BillPermissionFlags.NoFlags Then
                
Return Nothing
            
End IfReturn New BillPermission(mFlags)
        
End FunctionPublic Overrides Function IsSubsetOf(ByVal target As IPermission) As Boolean
            
If target Is Nothing Then
                
Return Me.gFlags = BillPermissionFlags.NoFlags
            
End IfDim mResult As Boolean = FalseTry
                
Dim mPermission As BillPermission = DirectCast(target, BillPermission)If mPermission.IsUnrestricted Then
                    
Return True
                
End IfIf Me.IsUnrestricted Then
                    
Return False
                
End IfDim mMaxInt As Integer = BillPermissionFlags.AllFlags + 1
                
Dim mNum As Integer = CInt(Math.Log(mMaxInt) / Math.Log(2))Dim mValue As IntegerFor i As Integer = 0 To mNum - 1
                    mValue 
= CInt(Math.Pow(2, i))

                    mResult 

= ((Me.gFlags And mValue) <= (mPermission.Flags And mValue))
                    
If mResult = False Then Exit For
                
NextCatch ex As InvalidCastException
                
Throw New ArgumentException("WrongType")
            
End TryReturn mResult
        
End FunctionPublic Overrides Function Union(ByVal target As IPermission) As IPermission
            
If target Is Nothing Then
                
Return Me.Copy
            
End IfIf Not VerifyType(CType(target, CodeAccessPermission)) Then
                
Throw New ArgumentException("WrongType")
            
End IfDim mPermission As BillPermission = DirectCast(target, BillPermission)
            
Return New BillPermission((Me.gFlags Or mPermission.Flags))
        
End FunctionPublic Overrides Function ToXml() As SecurityElement
            
Dim element As SecurityElement = XMLUtil.CreatePermissionElement(Me)
            
If Not Me.IsUnrestricted Then
                
If Me.gFlags <> BillPermissionFlags.NoFlags Then
                    element.AddAttribute(
"Flags", [Enum].GetName(GetType(BillPermissionFlags), Me.gFlags))
                
End IfReturn element
            
End If

            XMLUtil.AddUnrestrictedAttribute(element)

Return element
        
End Function
    
End Class
End Namespace

BillPermissionAttribute.vb

Imports System.Security
Imports System.Security.Permissions
Namespace LzmTW.uSystem.uSecurity
    
<Serializable()> _
    
<AttributeUsage( _
        AttributeTargets.Method 
Or _
        AttributeTargets.Constructor 
Or _
        AttributeTargets.Struct 
Or _
        AttributeTargets.Class 
Or _
        AttributeTargets.Assembly, AllowMultiple:
=True, Inherited:=False)> _
    
Public NotInheritable Class BillPermissionAttribute
        
Inherits CodeAccessSecurityAttribute
        
Private gFlags As BillPermissionFlagsPublic Sub New(ByVal action As SecurityAction)
            
MyBase.New(action)
        
End SubPublic Overrides Function CreatePermission() As System.Security.IPermission
            
If MyBase.Unrestricted Then
                
Return New BillPermission(PermissionState.Unrestricted)
            
End IfReturn New BillPermission(Me.gFlags)
        
End FunctionPublic Property [New]() As Boolean
            
Get
                
Return GetValue(BillPermissionFlags.[New])
            
End Get
            
Set(ByVal value As Boolean)
                SetValue(BillPermissionFlags.[
New], value)
            
End Set
        
End PropertyPublic Property Edit() As Boolean
            
Get
                
Return GetValue(BillPermissionFlags.Edit)
            
End Get
            
Set(ByVal value As Boolean)
                SetValue(BillPermissionFlags.Edit, value)
            
End Set
        
End PropertyPublic Property Delete() As Boolean
            
Get
                
Return GetValue(BillPermissionFlags.Delete)
            
End Get
            
Set(ByVal value As Boolean)
                SetValue(BillPermissionFlags.Delete, value)
            
End Set
        
End PropertyPrivate Function GetValue(ByVal flags As BillPermissionFlags) As Boolean
            
Return ((Me.gFlags And flags) <> BillPermissionFlags.NoFlags)
        
End FunctionPrivate Sub SetValue(ByVal flags As BillPermissionFlags, ByVal value As Boolean)
            
If value = True Then
                
Me.gFlags = Me.gFlags Or flags
            
Else
                
Me.gFlags = Me.gFlags And Not flags
            
End If
        
End SubEnd Class
End Namespace

BillPermissionFlags.vb

Namespace LzmTW.uSystem.uSecurity
    
<Flags()> _
    
Public Enum BillPermissionFlags
        NoFlags 
= 0
        [
New= 1
        Edit 
= 2
        Delete 
= 4
        AllFlags 
= 7
    
End Enum
End Namespace

XMLUtil.vb

Imports System.Security
Imports System.Security.Permissions
Namespace LzmTW.uSystem.uSecurity
    
Friend Class XMLUtil
        
Private Shared Function IsPermissionElement(ByVal element As SecurityElement) As Boolean
            
If Not element.Tag.Equals("Permission"AndAlso Not element.Tag.Equals("IPermission"Then
                
Return False
            
End If
            
Return True
        
End FunctionFriend Shared Function CreatePermissionElement(ByVal perm As CodeAccessPermission, _
            
Optional ByVal permname As String = NothingAs SecurityElement
            
Dim element As New SecurityElement("IPermission")
            AddClassAttribute(element, perm.GetType, permname)
            element.AddAttribute(
"version""1")
            
Return element
        
End FunctionPrivate Shared Sub AddClassAttribute(ByVal element As SecurityElement, ByVal type As Type, ByVal typename As String)
            
If typename Is Nothing Then
                
typename = type.FullName
            
End If
            element.AddAttribute(
"class"String.Concat(typename"", type.Module.Assembly.FullName.Replace(""""c, "'"c)))
        
End SubFriend Shared Sub AddUnrestrictedAttribute(ByVal element As SecurityElement)
            element.AddAttribute(
"Unrestricted""true")
        
End SubFriend Shared Sub ValidateElement(ByVal element As SecurityElement)
            
If element Is Nothing Then
                
Throw New ArgumentNullException("element")
            
End IfIf Not IsPermissionElement(element) Then
                
Throw New ArgumentException("PermissionElement")
            
End IfDim version As String = element.Attribute("version")
            
If Not version Is Nothing AndAlso Not version.Equals("1"Then
                
Throw New ArgumentException("version")
            
End If
        
End SubFriend Shared Function IsUnrestricted(ByVal element As SecurityElement) As Boolean
            
Dim Unrestricted As String = element.Attribute("Unrestricted")
            
If Unrestricted Is Nothing Then
                
Return False
            
End IfReturn Unrestricted.Equals("true")
        
End FunctionEnd Class
End Namespace

生成器下载,不含源代码:CPABuilder