Назначение ролей пользователям - PullRequest
2 голосов
/ 22 февраля 2009

Мне сложно понять, как назначать роли пользователям. У меня работает механизм входа, но мне нужно выяснить, как использовать роли, определенные для предоставления пользователям определенного доступа.

У меня есть база данных с этими таблицами:

                     Tables
                     ------
   UserTbl          RolesTbl           UserInRoleTbl
   -------         ----------          -------------
 UserID  (PK)      RoleId  (PK)        ID       (PK)
 Name              RoleName            UserId
 UserName          Description         RoleId
 Password
 Email

В этой небольшой базе данных я тестирую возможность назначать роли пользователю.

Я использую LINQtoSQL в качестве уровня доступа к данным. Я создал механизм входа в систему для входа в программу, а затем застрял в том, что делать дальше.

Например:

username = admin,password= admin, RoleId = 1 ;Rolename =Administrator;

И затем я использую следующий код после входа в систему, чтобы получить роль: n

public partial class Window3 : Window
{  

    public Window3()
    {
        InitializeComponent();

        GenericIdentity My2 = new GenericIdentity("admin");

        string[] roles1 = { "Administrator" };

        GenericPrincipal principal1 = new GenericPrincipal(My2, roles1);
        Thread.CurrentPrincipal = principal1;
     }

private void LoadWindow(object sender, RoutedEventArgs e)
    {   if (Thread.CurrentPrincipal.IsInRole("Administrator"))
        {
             exercise.Visibility = Visibility;
              tot.IsEnabled = false;
        }

} * * тысяча двадцать-один

Я реализую роль кода, но нет связи с базой данных; вместо этого я хочу сохранить роль из базы данных, создать метод в C # и записать код, который после входа пользователя в систему для доступа к приложению.

Чтобы объяснить далее: я дал Rolename = Administrator, поэтому, если пользователь является администратором, он получит эту роль, но я не уверен, как извлечь эту информацию из базы данных и связать ее с пользователем. Кто-нибудь может мне помочь?

Похожие (или возможно дублирующие) вопросы того же пользователя:

Имя пользователя и роль
Аутентификация форм
Как создать роль для помещения в базу данных?

Ответы [ 2 ]

3 голосов
/ 22 февраля 2009

Извините, я нахожу ваш вопрос немного запутанным.

Похоже, вы хотите иметь две таблицы, User и Role, с промежуточной таблицей «многие ко многим» UserRole. У пользователя и роли должны быть первичные ключи, оба из которых отображаются в таблице соединений.

create table user
(
    user_id int not null, 
    -- other fields here, like username, password, etc.
    primary key(user_id)
);

create table role
(
    role_id int not null,
    -- other fields here, like role name, etc.
    primary key(role_id)
);

create table user_role
(
    user_id int not null,
    role_id int not null,
    primary key(user_id, role_id),
    foreign key(user_id) references(user),
    foreign key(role_id) references(role)
);

Когда вы запрашиваете у пользователя полномочия, вы присоединяетесь к таблице «многие ко многим», чтобы вернуть все потенциальные роли одновременно. Если предоставленные вами учетные данные содержат роль, ваш код авторизации должен проверить, чтобы убедиться, что он является членом набора потенциальных ролей в то время.

Один небольшой совет: не включайте "Tbl" в названия таблиц. Они излишни, по моему мнению.

2 голосов
/ 23 февраля 2009

Если в вашей базе данных есть «UserTbl» и «RolesTbl», у вас также должно быть два класса «UserTbl» и «RolesTbl» в вашей модели LINQ-to-SQL.

Чтобы сохранить роль в базе данных, создайте экземпляр одного из этих объектов "RolesTbl", задайте его свойства, а затем добавьте его в контекст данных LINQ. То же самое с объектом "UserTbl".

РЕДАКТИРОВАТЬ: вот запрашиваемый пример кода - при условии, что вы настроили свою базу данных, свою модель LINQ-to-SQL и использовали все имена по умолчанию:

// create the LINQ-to-SQL Data context
UsersAndRolesDataContext dc = new UsersAndRolesDataContext();

// create new instace of "UserTbl" object
UserTbl newUser = new UserTbl();
newUser.UserID = "newuser";
newUser.Name = "Some NewUser";
newUser.EMail = "newuser@somewhere.org";
newUser.Password = "TopSecret";

// add new user to the table of users in the data context
dc.UserTbls.InsertOnSubmit(newUser);

// create new instance of a role
RolesTbl newRole = new RolesTbl();
newRole.RoleId = "ADMIN";
newRole.RoleName = "Administrators";
newRole.Description = "User with administrative rights";

// add new role into LINQ-to-SQL Data context
dc.RolesTbls.InsertOnSubmit(newRole);

// write out all changes back to database
dc.SubmitChanges();

Помогает ли это вообще?

Марк

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...