문제

나는 문서를 읽고, 인터 웹을 수색했으며, 맞춤형 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에서 특수 폴더 지원을 구현하지 않은 이유 중 하나 일 수 있다고 생각합니다.)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top