我有这些数据库:table<User>(UserID,Name,Surname,Username,Password,Email)
,table<Role>(RoleID,RoleName,Description)
和table<UsersInRole>(UserID,RoleID)
。我使用用户名和密码创建登录验证以访问应用程序(使用Linq ToSql存储数据),这是正确的。
现在我希望为每个用户创建一个角色,但我不知道如何解决它;我看到了一些关于它的功能,但它引用了web.app。
这是适用于登录的程序代码:
public partial class Window1 : Window
{
public Window1()
{
InitializeComponent();
}
public bool ValidateApplicationUser(string userName, string password)
{
{
var AuthContext = new DataClasses1DataContext();
var query = from c in AuthContext.Users
where (c.Username == userName.ToLower() && c.Password == password.ToLower())
select c;
if(query.Count() != 0 )
{
return true;
}
return false;
}
}
private void mahhh(object sender, RoutedEventArgs e)
{
bool authenticated = true;
{
if (usernameTextBox.Text !="" && passwordTextBox.Text != "")
{
authenticated = ValidateApplicationUser(usernameTextBox.Text , passwordTextBox.Text);
}
}
if (!authenticated)
{
MessageBox.Show("Invalid login. Try again.");
}
else
{
MessageBox.Show("Congradulations! You're a valid user!");
Window3 c = new Window3();
c.ShowDialog();
this.Close();
}
}
}
我不知道如何实现一种方法来为用户分配角色。 你有任何想法或建议做对吗?
答案 0 :(得分:3)
首先,尽量不要在数据库中存储密码;最好存储一个哈希值。我不太确定你的意思是“为用户分配角色” - 你是否难以从数据库中获取角色?或者您不确定之后该怎么做?如果是后者,“主要”是要走的路;在最简单的层面:
string username = ...
string[] roles = ...
Thread.CurrentPrincipal = new GenericPrincipal(
new GenericIdentity(username), roles);
现在您可以使用基于角色的安全性,无论是声明式还是命令式。
声明:
[PrincipalPermission(SecurityAction.Demand, Role="ADMIN")]
public void Foo()
{ // validated automatically by the .NET runtime ;-p
}
势在必行:
static bool IsInRole(string role)
{
IPrincipal principal = Thread.CurrentPrincipal;
return principal != null && principal.IsInRole(role);
}
...
bool isAdmin = IsInRole("ADMIN");