특수 폴더에서 파일 지식을 선언합니다
-
08-07-2019 - |
문제
나는 문서를 읽고, 인터 웹을 수색했으며, 맞춤형 CAS 권한을 쓰지 않고하고 싶은 일은 할 수없는 것 같습니다. 그래서 여기 내 마지막 도랑 시도가 있습니다.
사용자 MyDocuments 디렉토리에 대한 권한을 요구하기 위해 클래스의 Fileiopermission (Attribute)을 선언적으로 정의하고 싶습니다. 이 디렉토리는 모든 운영 체제에서 일관성이 없으며 일반적으로 경로를 통해 .NET에서 액세스합니다. FileIopermissionAttribute에 '토큰'구문 또는 유사한 기능이 있습니까?
그렇지 않다면 본질적으로 그렇게하는 사용자 정의 권한 객체를 작성해야 할 것 같아요 ...
감사!
해결책
실제로 이에 대한 사용자 정의 권한이 필요하지 않지만 FileIopermissionAttribute와 유사한 사용자 정의 속성이 필요합니다. CreatePermission 메소드에서 속성에 전달 된 특수 폴더 값에 해당하는 실제 폴더 경로에 대한 Fileiopermission을 만들 수 있습니다. EG (일부 유효성 검사가 추가됨) :
[Serializable]
[AttributeUsage(AttributeTargets.Method | AttributeTargets.Constructor | AttributeTargets.Struct | AttributeTargets.Class | AttributeTargets.Assembly, AllowMultiple = true, Inherited = false)]
public sealed class SpecialFolderIOPermissionAttribute : CodeAccessSecurityAttribute
{
private Environment.SpecialFolder _folder;
private FileIOPermissionAccess _access;
public SpecialFolderIOPermissionAttribute(SecurityAction action)
: base(action)
{
this.Unrestricted = true;
}
public Environment.SpecialFolder Folder
{
get
{
return this._folder;
}
set
{
this._folder = value;
this.Unrestricted = false;
}
}
public FileIOPermissionAccess Access
{
get
{
return this._access;
}
set
{
this._access = value;
this.Unrestricted = false;
}
}
public override IPermission CreatePermission()
{
FileIOPermission permission;
if (this.Unrestricted)
{
permission = new FileIOPermission(PermissionState.Unrestricted);
}
else
{
permission = new FileIOPermission(this.Access, Environment.GetFolderPath(this.Folder));
}
return permission;
}
}
여기서 조심해야 할 한 가지는 Environment.GetFolderPath가 대상 폴더에서 PATHDISCOVERY 액세스를 요구할 것이므로 CreatePermission 메소드의 허가를 주장 해야하는지 결정해야합니다. (개인적으로, 나는 이것에 대한 합병증이 BCL 팀이 FileiopermissionAttribute에서 특수 폴더 지원을 구현하지 않은 이유 중 하나 일 수 있다고 생각합니다.)