繁体   English   中英

asp.net扩展IPrincipal

[英]asp.net extending IPrincipal

我想在asp.net中扩展IPrincipal以允许我获得我将定义的usertype。 我想在控制器中做到这一点

string type = User.UserType 

然后在我的扩展方法中,我将有一个方法,如

public string UserType()
{
  // do some database access 
  return userType

}

我怎样才能做到这一点? 可能吗? 谢谢!

您可以制作扩展方法:

public static string UserType(this IPrincipal principal) {
    // do some database access 
    return something;
}

当然。 让你的类实现IPrincipal:

public class MyPrinciple : IPrincipal {
    // do whatever
}

扩展方法:

public static string UserType(this MyPrinciple principle) {
    // do something
}

这是一个实现IPrincipal的示例自定义类。 此类包含一些额外的方法来检查角色关联,但根据您的要求显示名为UserType的属性。

  public class UserPrincipal : IPrincipal
  {
    private IIdentity _identity;
    private string[] _roles;

    private string _usertype = string.Empty;


    public UserPrincipal(IIdentity identity, string[] roles)
    {
      _identity = identity;
      _roles = new string[roles.Length];
      roles.CopyTo(_roles, 0);
      Array.Sort(_roles);
    }

    public IIdentity Identity
    {
      get
      {
        return _identity;
      }
    }

    public bool IsInRole(string role)
    {
      return Array.BinarySearch(_roles, role) >= 0 ? true : false;
    }

    public bool IsInAllRoles(params string[] roles)
    {
      foreach (string searchrole in roles)
      {
        if (Array.BinarySearch(_roles, searchrole) < 0)
        {
          return false;
        }
      }
      return true;
    }

    public bool IsInAnyRoles(params string[] roles)
    {
      foreach (string searchrole in roles)
      {
        if (Array.BinarySearch(_roles, searchrole) > 0)
        {
          return true;
        }
      }
      return false;
    }

    public string UserType
    {
      get
      {
        return _usertype;
      }
      set
      {
        _usertype = value;
      }
    }

  }

请享用!

基本上没有。 您可以使用MyPrincipal等类实现IPrincipal ,并且该类可以具有UserType属性,但您必须通过其自己类型的引用访问该实例才能到达它,而不是通过接口引用。

编辑

扩展方法可以工作,但只有当你绝对肯定你永远不会在实现IPrincipal但不是你自己的类的实例的东西上调用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM