






















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))XMLUtil.AddUnrestrictedAttribute(element)
Return elementBillPermissionAttribute.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 = Nothing) As 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
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。